0

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

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

并在视图中显示给用户:

echo $this->form;

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

4

2 回答 2

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()并且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;
}
于 2012-05-04T11:20:57.557 回答
0

典型的工作流程是:

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

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

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

于 2012-05-04T08:37:43.180 回答