如何在Zend中提交表单?

时间:2011-06-11 11:40:40

标签: php zend-framework forms post

我有以下操作来显示表单

public function showformAction() {  
   $this->view->form = new Form_MyForm();
   $this->view->form->setAction( 'submitform' );
}

上面的操作只显示了一个textarea和提交按钮的表单。

我正在使用以下操作提交上述表单:

public function submitformAction() {

    $form = new Form_MyForm();
    $request = $this->getRequest();

      if ( $request->isPost() ) {
           $values = $form->getValues();
           print_r($values);die();      
      } else {
           echo 'Invalid Form'; 
      }
}

以上操作显示以下输出:

Array ( [myfield] => ) 

这意味着它没有正确发布值并始终显示空数组或我没有正确获取发布值。如何将值发布到submitformAction()。

由于

2 个答案:

答案 0 :(得分:5)

我认为在访问提交表单的值之前必须使用isValid(),因为正确的是检查并定价值

public function submitformAction() {

    $form = new Form_MyForm();
    $request = $this->getRequest();

      if ( $request->isPost() ) {
          if ($form->isValid( $request->getPost() )) {
              $values = $form->getValues();
              print_r($values);die();     
          } 
      } else {
           echo 'Invalid Form'; 
      }
}

答案 1 :(得分:2)

补充@VAShhh响应。有一些更多细节: 您需要做两件事,使用POSTed数据填充表单字段,并将安全过滤器和验证器应用于该数据。 Zend_Form提供了一个执行两者的简单函数,它是isValid($data)

所以你应该:

  1. 构建表单
  2. 测试您是否处于POST请求中
  3. populate&过滤器&验证此数据
  4. 处理中的事实可能无效并重新显示现在的表格 装饰有错误 OR 从表单
  5. 中检索有效数据

    所以你应该得到:

    function submitformAction() {
        $form = new Form_MyForm();
        $request = $this->getRequest();
    
        if ( $request->isPost() ) {
            if (!$form->isValid($request->getPost())) {
                $this->view->form = $form;
                // here maybe you could connect to the same view script as your first action
                // another solution is to use only one action for showform & submitform actions
                // and detect the fact it's not a post to do the showform part
            } else {
                // values are secure if filters are on each form element
                // and they are valid if all validators are set
                $securizedvalues = $form->getValues();
                // temporary debug
                print_r($securizedvalues);die();
                // here the nice thing to do at the end, after the job is quite
                // certainly a REDIRECT with a code 303 (Redirect after POSt)      
                $redirector = $this->_helper->getHelper('Redirector');
                $redirector->setCode(303)
                  ->setExit(true)
                  ->setGotoSimple('newaction','acontroller','amodule');
                $redirector->redirectAndExit();
        } else {
               throw new Zend_Exception('Invalid Method'); 
        }
    }
    

    正如在重新显示表单的代码中所说的那样,你真的尝试使用相同的功能来显示和处理POST,因为很多步骤都是一样的:

    • 构建表单
    • 出现错误时在视图中显示

    通过检测请求是POST,您可以检测到您处于POST处理案例中。