经过多次阅读,我意识到Zend_Form可以分为各种表示形式,它很适合作为模型。从Doctrine实体构建Zend_Form的元素
遵循Matthew Weier O'Phinney提出的逻辑,我想到了将Doctrine [2] Entitie传递给扩展Zend_Form的类的构造函数,在这种情况下,App_Form。
所以在我entitie,我有一个方法为每个表单,下面的模式:
protected function _formFormName{}()
是Entitie扩展抽象类App_Form_Entitie,有一个方法来检索形式:
final public function getForm($form = null)
并仍然有方法isValid()和getMessage()。
但很多人宁愿留在单独的文件形式,请参阅:
Where to place Zend_Forms, Controller? Model? Somewhere else?
我不知道其中哪些是最好的方法:通过实体的形式的构造函数作为第一个参数,以及所需的形式,如可选的第二个参数,或从实体获取表单(如Matthew所述),并将第一个参数作为所需表单的名称传递。
欢迎任何答案。
这里是展示两个例子怎么会,2个码,我的建议:
<?php
//My controller action
/* @var $em Doctrine\ORM\EntityManager */
$user = $em->find('MyNamespace\User', 1);
$loginForm = new App_Form($user, array('form'=> 'login'));
$this->view->loginForm = $loginForm;
//My view script
echo $this->loginForm;
这里马修的建议,其中的形式在不同的文件:
<?php
//My controller action
/* @var $em Doctrine\ORM\EntityManager */
$user = $em->find('MyNamespace\User', 1);
$formLogin = $user->getForm('login'); //The entity creates a new instance of the class App_Form_Login and returns it.
$this->view->formLogin = $formLogin
//In my view...
echo $this->formLogin;
你可能会详细说明这两个选项的一段代码? – rojoca 2011-04-25 14:55:22
@rojoca我加了个例子。 – JCM 2011-04-25 20:11:57