Создание элементов Zend_Form из сущности Doctrine
После долгих чтений я понял, что 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;
1 ответ
Это не кажется правильным для 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