从Doctrine实体构建Zend_Form的元素

时间:2011-04-24 13:54:36

标签: model zend-form doctrine-orm entities

经过多次阅读,我意识到Zend_Form可以分为不同的表示形式,它很适合作为模型。

遵循Matthew Weier O'Phinney提出的逻辑,我有一个想法将Doctrine [2] Entitie传递给扩展Zend_Form的类的构造函数,例如App_Form。

所以在我的权利中,我有一个方法,每个表单,遵循模式:

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所描述的那样)并将第一个参数作为所需表格的名称传递。

欢迎任何回答。

这里有两个代码,展示了两个例子,首先是我的建议:

<?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;

1 个答案:

答案 0 :(得分:3)

User实体创建App_Form对象似乎不对。您的实体是您在应用程序的其他部分中引用的数据的理想化抽象。这不会阻止您为表单类型分别使用单独的文件。我会选择像你的第一个选择:

<?php
//My controller action
/* @var $em Doctrine\ORM\EntityManager */
$user = $em->find('MyNamespace\User', 1);
$loginForm = new App_Form_Login($user);
$this->view->loginForm = $loginForm;

//My view script
echo $this->loginForm