将Zend_Form在视图中提交的数据传递给模型

时间:2012-05-04 08:32:23

标签: php model-view-controller zend-framework

我使用zend表单创建了一个表单,该表单位于applications目录的表单目录中。我在控制器中创建了这个表单的实例:

public function getBookSlotForm(){
        return new Application_Form_BookSlot();
    }
public function bookSlotAction()
    {
    $form = $this->getBookSlotForm();
    $this->view->form = $form;
    }

并在视图中将其显示给用户:

echo $this->form;

当用户填写表单时,我该如何将该数据存储在模型中的变量中?

2 个答案:

答案 0 :(得分:1)

只要他去,蒂姆是正确的,但你似乎需要更多的细节。您似乎对在页面上显示表单没有任何问题。现在,将该表单中的数据导入您的控制器,然后再将其转换为您想要的任何模型,这非常简单直接。

我将假设您在此示例中使用表单中的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()和{ {1}}不会应用表单过滤器。

现在我们知道我们从将值发送到模型的过程中收到的内容非常简单:

getParams()

答案 1 :(得分:0)

典型的工作流程是:

public function bookSlotAction()
{
    $form = $this->getBookSlotForm();
    if ($form->isValid($this->getRequest()->getPost()) {
        // do stuff and then redirect
    }

    $this->view->form = $form;
}

调用isValid()也会将数据存储在表单对象中,因此如果验证失败,您的表单将重新显示用户输入的数据。