Zend_Form ::何时应该在视图中创建表单而不是在控制器中?
选项1 - 在控制器中创建的表单并传递给视图(通常使用)
控制器:
$form=new MyForm();
$this->view->form=$form;
查看:
echo $this->form;
选项2 - 直接在视图中创建的表单(看起来更好,因为它构成了视图的子部分)
查看:
$form=new MyForm();
echo $this->form;
由于
答案 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)
想想你的队友,你的设计师(或图形集成商)也是程序员吗?这种方法会破坏可重用性和任务分离。