Pet*_*mit 8 model-view-controller zend-framework zend-form
在Zend框架主要意味着MVC使用.其中一个非常有用的组件是Zend_Form.
找到Zend_Form的地方我有点麻烦.它是视图,模型或控制器的一部分,我应该赋予它哪些责任.
问题是,Zend_Form做了两件事:装饰和渲染表单并验证它.第一个是真实的视图任务,第二个是真正的模型任务.
现在最常见的用途似乎是让表单只与控制器交互,有效地将两个任务(渲染和验证)放到视图/控制器上.
Matthew Weier O'Phinney给出的另一个选项是将表单附加到模型,并在控制器中添加后面的视图选项.
所以,我很怀疑.我应该在MVC模式中放置Zend_Form,我应该如何使用它?
编辑目前为止的好答案,谢谢!我将在它到期前一两个小时给予赏金,所以如果你有更多的想法,请给出答案!
Zend_Form可以在不同的点上查看.它根本不能被视为一层MVC模式的一部分.
首先,Zend_Form使用装饰器和视图助手来渲染表单,此时它是视图层的一部分.然后,Zend_Form执行模型作业过滤和验证内容的一部分.
我们知道Controller层从视图中呈现输入并将其传递给模型.实际上,控制器层决定从模型层加载哪个资源,然后执行更正调用.
当您从控制器层调用Zend_Form时,您可以考虑调用一个模型资源来执行valitation和过滤操作,并确定这是否是有效输入.例如:
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;
}
Run Code Online (Sandbox Code Playgroud)
将表单绑定到模型可以被认为是一个很好的实践,因为当您执行过滤和验证操作时,您处于模型层.所以,正如马修提出的那样:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
从标准目录结构中我们可以看到Forms不在模型文件夹中,也不在视图文件夹中,因为Zend_Form是一个将许多资源和层绑定在一起的特定类.如果您查看Matthews帖子,您会发现这正是在视图脚本上设置操作URL并且表单与模型绑定时所说的内容.
最后,您可以分析您的上下文并选择这两种方法之一.
目前,我的选择是将表单与模型联系起来.看起来不错!对我来说很有意义.
| 归档时间: |
|
| 查看次数: |
729 次 |
| 最近记录: |