Zend_Form :: Когда должна создаваться форма в представлении, а не в контроллере? - PullRequest
2 голосов
/ 14 июля 2010

Zend_Form :: Когда следует создавать форму в представлении, а не в контроллере?

опция 1 - форма создается в контроллере и передается в представление (обычно используется)

контроллер:

$form=new MyForm();
$this->view->form=$form;

представление:

echo $this->form;

опция 2 - форма, созданная в представлении напрямую (выглядит лучше дляменя, потому что образуют свою часть зрения)

view:

$form=new MyForm();
echo $this->form;

Спасибо

Ответы [ 4 ]

5 голосов
/ 14 июля 2010

Короче говоря: новее в представлении .

В конечном итоге вы можете:

  • создать помощник вида для сложных задач (и вызвать помощника в виде * 1008)*),
  • или используйте Model::getForm()
  • или service::getForm(), когда вам нужны формы перекрестного действия.

Дальнейшее объяснение:

Потому что в идеальном случае представления содержат только HTML, чтобы отделить логику от представления (MVC).

При использовании TDD вы пишете тесты для логики, а не для скриптов представления, которые являются только одеждой для переменных.

Отображение формы - это не только сама форма, но и проверка, была ли она отправлена ​​или нет, проверка ошибок валидации, установка переменных flash messenger и многое другое.

Это слишком сложные задачидля того, чтобы поместить их для просмотра скриптов.

В качестве хорошего упражнения по разделению логики и представления, я рекомендую вам взглянуть на PHPTAL язык шаблонов, который является хорошей альтернативой нативному PHP какиспользуемый язык шаблоновв ZF.

2 голосов
/ 15 июля 2010

Если форма появляется, скажем, на боковой панели макета - например, форма «Подписаться на наш список рассылки» - кажется разумным позволить представлению создавать / отображать ее самостоятельно, хотя я бы, вероятно, сделалэто внутри помощника вида, а не любые вызовы new My_Form() в скрипте вида.Зачем заставлять каждый контроллер иметь дело с этим?

Как Падрейк Брейди отмечает в своей онлайн-книге ZF Выживший в глубине : "Контроллеры - это не полиция данных".

1 голос
/ 14 июля 2010

Я думаю, что первый вариант верен, потому что Zend_Form - это не объект представления, а объект бизнес-логики. Поэтому неправильно пытаться создавать его в представлении. Если вы хотите просто отобразить какую-либо форму, просто пометьте ее непосредственно в HTML - для программиста это будет намного проще, по крайней мере.

0 голосов
/ 21 июля 2010

Подумайте о своих товарищах по команде, ваши программисты (или графические интеграторы) тоже программисты? этот подход нарушит возможность повторного использования и разделения задач.

...