就蒂姆而言,他是正确的,但您似乎需要更多细节。您似乎对将表单显示在页面上没有任何问题。现在将该表单中的数据输入您的控制器,然后输入您想要的任何模型,这非常简单直接。
我将假设您在此示例中使用表单中的 post 方法。
当您在任何 php 应用程序中发布表单时,它会将其数据以数组形式发送到$_POST
变量。在 ZF 中,此变量存储在请求对象的前端控制器中,通常使用它访问$this->getRequest()->getPost()
并将返回一个关联的值数组:
//for example $this->getRequest->getPost();
POST array(2) {
["query"] => string(4) "joel"
["search"] => string(23) "Search Music Collection"
}
//for example $this->getRequest()->getParams();
PARAMS array(5) {
["module"] => string(5) "music"
["controller"] => string(5) "index"
["action"] => string(7) "display"
["query"] => string(4) "joel"
["search"] => string(23) "Search Music Collection"
}
作为使用扩展表单时的特殊情况,Zend_Form
您应该使用访问表单值,$form->getValues()
因为这将返回已应用表单过滤器的表单值,getPost()
并且getParams()
不会应用表单过滤器。
所以现在我们知道我们从将值发送到模型的过程中收到了什么非常简单:
public function bookSlotAction()
{
$form = $this->getBookSlotForm();
//make sure the form has posted
if ($this->getRequest()->isPost()){
//make sure the $_POST data passes validation
if ($form->isValid($this->getRequest()->getPost()) {
//get filtered and validated form values
$data = $form->getValues();
//instantiate your model
$model = yourModel();
//use data to work with model as required
$model->sendData($data);
}
//if form is not vaild populate form for resubmission
$form->populate($this->getRequest()->getPost());
}
//if form has been posted the form will be displayed
$this->view->form = $form;
}