Zend框架:链接形式:我如何“取消设置$ this-> getRequest-> isPost()”?

时间:2010-08-31 14:21:37

标签: php zend-framework

这是一个非常基本的东西,但我无法弄清楚如何使用Zend Framework“正确”解决这个问题:

场景:

  1. 页面显示表单1,
  2. 页面显示表单2
  3. 这是一个非常基本的东西,但我无法弄清楚如何使用Zend Framework“正确”解决这个问题:

    场景:

    1. 页面显示表单1,
    2. 页面显示表格2
    3. class FooController extends Zend_Controller_Action {  
          ...  
          public function form1Action(){  
              if ($this->getRequest()->isPost()) {  
                 // save data from form1 in database  
                 $this->_forward('form2');  
              }  
              // display form1  
          }  
          public function form2Action(){  
              if ($this->getRequest()->isPost()) {  
                 // save data from form2 in database  
                 $this->_forward('somewherelese');  
              }  
              // display form2  
          }  
      }  
      

      当用户发布form1时,首先执行form1Action中的if-condition(这就是我想要的),但也执行form2Action中的if-condition。

      “unset $ this-> getRequest() - > isPost()”的正确方法是什么?

      注意:表单是“手动”构建的(不使用Zend表单)

3 个答案:

答案 0 :(得分:4)

您有三种选择:

  1. 使用_redirect代替_forward。在同一请求下转发重定向。重定向将创建一个新请求。'
  2. 在_forward调用中设置一个参数,您可以在第二种形式中查看:例如'form' => 2. More information.
  3. 使用开箱即用的Zend_Form中包含的built in multipage forms

答案 1 :(得分:0)

你总是可以在action 1中设置一个类变量,如果是,则不要在第二步中运行代码。

类似的东西:

class FooController extends Zend_Controller_Action {  
private $_fromAction1 = false;
    ...  
    public function form1Action(){  
        if ($this->getRequest()->isPost()) {  
           // save data from form1 in database  
$this->_fromAction1 = true;
           $this->_forward('form2');  
        }  
        // display form1  
    }  
    public function form2Action(){  
        if ($this->getRequest()->isPost() && !$this->_formAction1) {  
           // save data from form2 in database  
           $this->_forward('somewherelese');  
        }  
        // display form2  
    }  
} 

答案 2 :(得分:0)

这最后一个选项对我不起作用。

$ this-> _forward()创建控制器的新实例,因此在第一个实例中设置变量不会影响新实例中的变量。

我的解决方案是使$ _fromAction1 static共享2个实例之间的变量。

class FooController extends Zend_Controller_Action {
private static $_fromAction1 = false;
    ...  
    public function form1Action(){  
        if ($this->getRequest()->isPost()) {  
           // save data from form1 in database  
FooController::_fromAction1 = true;
           $this->_forward('form2');  
        }  
        // display form1  
    }  
    public function form2Action(){  
        if ($this->getRequest()->isPost() && !FooController::_formAction1) {  
           // save data from form2 in database  
           $this->_forward('somewherelese');  
        }  
        // display form2  
    }  
}