После долгих прочтений я понял, что Zend_Form можно разделить на различные представления, он хорошо вписывается в представление как модель.
Следуя логике, предложенной Мэтью Вейером О'Финни, у меня возникла идея передать Doctrine[2] Entitie конструктору класса, расширяющего Zend_Form, в данном случае App_Form.
Итак, в моей сущности у меня есть метод для каждой формы, следующий шаблону:
protected function _formFormName{}()
этот Entitie расширяет абстрактный класс App_Form_Entitie, у которого есть метод для получения формы:
final public function getForm($form = null)
и по-прежнему иметь методы isValid() и getMessage().
Но многие предпочитают оставлять формы в отдельных файлах, см.:
Где разместить Zend_Forms, контроллер? Модель? Где-то еще?
Интересно, какой из них является лучшим способом: передать сущность конструктору формы в качестве первого параметра, а желаемую форму - таким, необязательным, вторым параметром, или получить форму из сущности (как описывает Мэтью) и передать в качестве первого параметра имя желаемой формы.
Любой ответ приветствуется.
Вот два кода, показывающие, как будут выглядеть два примера, во-первых, мое предложение:
<?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;