Wednesday, August 25, 2010

symfony 1.4 форм хийх тухай

За бас нэг бичлэг оруулчихъя. Уул нь symfony -ийн сайт дээр байгаа ч гэсэн зарим хүмүүст хэрэг болох, мөн өөртөө тэмдэглэл болгоод биччихье.

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'));

$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());
}
}
за success буюу template дээр бол
// формоо нээнэ.
echo $form;
// submit товч
// форм oo хаана
гэх байх. Хамгийн гол нь model form, action хоёр юм.

No comments: