Zend_Form可以在不同的点查看。它完全不能被视为MVC模式的一部分。
首先,Zend_Form使用装饰器和视图助手来渲染窗体,此时它是视图层的一部分。 然后,Zend_Form完成模型作业的一部分过滤并验证内容。
我们知道Controller层从视图渲染输入并将其传递给模型。实际上,控制器层决定从模型层加载哪个资源,然后执行更正呼叫。
当您从控制器层调用Zend_Form时,您可以考虑调用一个模型资源来执行取值和筛选操作,并决定这是否是有效的输入。例如:
public function newAction()
{
$form = $this->getForm();
if($this->getRequest()->isPost())
{
$formData = $this->_request->getPost();
if($form->isValid($formData))
{
$Model = $this->getModel();
$id = $Model->insert($form->getValues());
}
}
$this->view->form = $form;
}
领带形式的模型,因为当你正在执行过滤和验证操作你的模型层上被认为是一个很好的实践。因此,当马修提出:
class Model_DbTable_Users extends Zend_Db_Table
{
protected $_name = 'users';
protected $_form;
public function getForm()
{
if(!$this->_form)
$this->_form = new Form_User();
return $this->_form;
}
public function add($data)
{
$form = $this->getForm();
if(!$form->isValid($data)) return false;
if($form->getValue('id'))
{
$id = (int) $form->getValue('id');
$this->update($form->getValues(), 'id =' . $id);
}
else
{
$id = $this->insert($form->getValues());
}
return $id;
}
}
从标准的目录结构,我们可以看到,表单是不是模型文件夹中,也没有在视图文件夹,因为Zend_Form的是,配合大量资源,各层连接在一起的特定类。如果你检查Matthews文章,你会意识到,这正是当在视图脚本上设置动作URL并且表单与模型绑定时所说的内容。
最后,你可以分析你的上下文,并选择这两种方法之一。
目前,我的选择是将表格与模型绑定。看起来不错!并对我有很大的意义。