2

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

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

控制器:

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

看法:

echo $this->form;

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

看法:

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

谢谢

4

4 回答 4

5

简而言之:更新的观点

您最终可能会:

  • 为复杂任务创建视图助手(并在视图中调用助手$this->getForm()),
  • 或使用Model::getForm()
  • 或者service::getForm()当您需要交叉操作表单时。

进一步说明:

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

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

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

这些任务过于复杂,无法让它们查看脚本。

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

于 2010-07-14T17:41:10.830 回答
2

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

正如Padraic Brady在他的在线 ZF 书籍Surviving the Deep End中指出的那样:“控制器不是数据警察”。

于 2010-07-15T18:08:14.297 回答
1

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

于 2010-07-14T16:34:51.393 回答
0

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

于 2010-07-21T16:00:47.383 回答