ฉันมีรูปแบบหลักคำสอน (KanoonGoodForm) ตามคลาสโมเดล KanoonGood ซึ่งมีลักษณะดังนี้:
class KanoonGoodForm extends BaseKanoonGoodForm
{
public function configure()
{
$this->widgetSchema['count_num']->setAttribute('size', '1');
$this->widgetSchema['price']->setAttribute('size', '1');
$this->validatorSchema['category_id']->setOption('required', false);
$this->validatorSchema['owner_id']->setOption('required', false);
$this->validatorSchema['shop_id']->setOption('required', false);
$this->validatorSchema['name']->setOption('required', false);
$this->validatorSchema['price']->setOption('required', false);
$this->validatorSchema['count_num']->setOption('required', false);
$this->validatorSchema['description']->setOption('required', false);
}
}
จากนั้นผมจึงสร้างคลาส KanoonGoodsGroupForm เพื่อให้มีแบบฟอร์มที่ฝังแบบฟอร์ม KanoonGoodForm ไว้ตามจำนวนที่ต้องการ:
class KanoonGoodsGroupForm extends sfForm
{
public function configure()
{
for ($i = 0; $i < 2; $i++)
{
$this->embedForm('good_'.($i+1), new KanoonGoodForm());
}
$this->widgetSchema->setNameFormat('KanoonGoodsGroup[%s]');
$this->mergePostValidator(new KanoonGoodValidatorSchema());
}
}
ในโมดูล (ชื่อ good) ฉันสะท้อนอินสแตนซ์ของ KanoonGoodsGroupForm เมื่อมีการเรียกการกระทำใหม่:
public function executeNew(sfWebRequest $request)
{
$this->form = new KanoonGoodsGroupForm();
}
เนื่องจากไม่จำเป็นต้องกรอกแบบฟอร์มที่ฝังไว้ทั้งหมด เนื่องจาก บทความนี้ บอกว่า ฉันสร้างเครื่องมือตรวจสอบของตัวเอง:
class KAnoonGoodValidatorSchema extends sfValidatorSchema
{
protected function configure($options = array(), $messages = array())
{
$this->addMessage('category_id', 'The category_id is required.');
$this->addMessage('owner_id', 'The owner_id is required.');
$this->addMessage('shop_id', 'The shop_id is required.');
$this->addMessage('name', 'The name is required.');
$this->addMessage('price', 'The price is required.');
$this->addMessage('count_num', 'The count_num is required.');
$this->addMessage('description', 'The description is required.');
}
protected function doClean($values)
{
$errorSchema = new sfValidatorErrorSchema($this);
foreach($values as $key => $value)
{
$errorSchemaLocal = new sfValidatorErrorSchema($this);
// no caption and no filename, remove the empty values
if (!$value['name'] && !$value['price']&& !$value['count_num']&& !$value['description'])
{
unset($values[$key]);
}
// some error for this embedded-form
if (count($errorSchemaLocal))
{
$errorSchema->addError($errorSchemaLocal, (string) $key);
}
}
// throws the error for the main form
if (count($errorSchema))
{
throw new sfValidatorErrorSchema($this, $errorSchema);
}
return $values;
}
}
ตอนนี้ฉันต้องการบันทึกแบบฟอร์มฝังตัวที่ผู้ใช้กรอก ฉันควรทำอย่างไรในการดำเนินการสร้างเพื่อให้บรรลุผลนี้
public function executeCreate(sfWebRequest $request)
{
$this->forward404Unless($request->isMethod(sfRequest::POST));
$this->form = new KanoonGoodsGroupForm();
$this->form->bind($request->getParameter('KanoonGoodsGroup'), $request->getFiles('KanoonGoodsGroup'));
if ($this->form->isValid())
{
//what should I do here? to save those filled embedded forms?
}
$this->setTemplate('edit');
}
foreach ($this->form->getEmbeddedForms() as $form) { $form->save(); }
- person 1ed   schedule 02.08.2012