После долгого прочтения я понял, что 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;