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並且表單與模型綁定時所說的內容。
最後,你可以分析你的上下文,並選擇這兩種方法之一。
目前,我的選擇是將表格與模型綁定。看起來不錯!並對我有很大的意義。