Zend_Form ::何时应该在视图中创建表单而不是在控制器中?

时间:2010-07-14 16:04:49

标签: zend-framework zend-form zend-view zend-controller

Zend_Form ::何时应该在视图中创建表单而不是在控制器中?

选项1 - 在控制器中创建的表单并传递给视图(通常使用)

控制器:

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

查看:

echo $this->form;

选项2 - 直接在视图中创建的表单(看起来更好,因为它构成了视图的子部分)

查看:

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

由于

4 个答案:

答案 0 :(得分:5)

简而言之:视野更新

你最终可能会:

  • 为复杂任务创建视图帮助程序(并在视图$this->getForm()中调用帮助程序),
  • 或使用Model::getForm()
  • 当您需要交叉行动表格时,
  • service::getForm()

进一步说明:

因为在理想情况下,视图仅包含HTML,以便将逻辑与表示(MVC)分开。

使用TDD时,您可以编写逻辑测试,而不是视图脚本,它们只是变量的衣服。

显示表单不仅是表单本身,还包括检查表单是否已提交,检查验证错误,设置flash messenger变量等等。

这些太复杂的任务使他们无法查看脚本。

作为分离逻辑和演示文稿的一个很好的练习,我建议你看一下PHPTAL模板语言,这是一个很好的替代原生PHP作为ZF中使用的模板语言。

答案 1 :(得分:2)

如果表单出现在布局的侧边栏中 - 比如“订阅我们的邮件列表”表单 - 允许视图自己创建/呈现它似乎是合理的,尽管我可能会这样做它在视图助手中,而不是在视图脚本中进行任何new My_Form()调用。为什么强迫每个控制器处理它?

正如Padraic Brady在他的在线ZF书Surviving the Deep End中所说:“控制人员不是数据警察”。

答案 2 :(得分:1)

我认为唯一的第一个变体是正确的,因为Zend_Form不是表示实体,而是业务逻辑实体。因此尝试在视图中实例化它是错误的。如果你只想显示一些表格,只需直接在HTML中标记 - 至少对编码人员来说这会更容易。

答案 3 :(得分:0)

想想你的队友,你的设计师(或图形集成商)也是程序员吗?这种方法会破坏可重用性和任务分离。