Создание элементов Zend_Form из сущности Doctrine - PullRequest
1 голос
/ 24 апреля 2011

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

3 голосов
/ 26 апреля 2011

Не похоже, что объект 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
...