symfony 1.4 дээр model -ийн object -д зориулж форм үүсгэдэг болсон юм.
Баазынхаа table -үүдийг үүсгээд symfony -гоо тохируулчихсан бол CLI дээрээсээ
symfony doctrine:build-forms
гэсэн коммандаар model -ийн формууд
lib/form/doctrine дотор үүсдэг.
Жишээ нь би article гэсэн моделийн формыг авч үзье. Тэгвэл lib/form/doctrine/ArticleForm.class.php гэсэн нэрээр файл үүснэ.
энэхүү файл дотор configure() гэдэг функц байх бөгөөд энд формынхоо бүтэц, validation зэргийг тохируулдаг юм.
Жишээ нь дээрх шиг байдлаар бичиж болно.
public function configure()
{
$this->disableLocalCSRFProtection();
// бүтцийг тохируулах хэсэг
$this->setWidgets(array(
'id' => new sfWidgetFormInputHidden(),
'name' => new sfWidgetFormInputText(),
'is_active' => new sfWidgetFormChoice(array('choices' =>
array('' => '--сонгох--', 1 => 'Идэвхтэй', 2 => 'Идэвхгүй'))),
'description' => new sfWidgetFormTextarea(),
));
$this->widgetSchema->setNameFormat('article[%s]');
// validation хэсэг
$this->setValidators(array(
'name' => new sfValidatorString(array('required'=>true),
array('required'=>'Нэрийг оруулах ёстой')),
'is_active' => new sfValidatorNumber(array('required'=>true,
'min'=>1, 'max'=>2), array('required'=>'Төлвийг сонгоно уу')),
'description' => new sfValidatorString(),
));
}
Одоо action.class.php дээр
$article = ArticleTable::find($request->getParameter('id'));за success буюу template дээр бол
$form = new ArticleForm($article);
if ($request->isMethod('post')){
$form->bind($request->getParameter('article'));
/* Энэ bind функцийн аргумент нь array байдаг бөгөөд
array('name'=>$value, ...) маягаар ашиглана. */
if($form->isValid()){
$form->save();
$this->getUser()->setFlash('success', 'Амжилттай');
return $this->redirect('@article?id='.$form['id']->getValue());
}
}
// формоо нээнэ.гэх байх. Хамгийн гол нь model form, action хоёр юм.
echo $form;
// submit товч
// форм oo хаана