这是一个非常基本的东西,但我无法弄清楚如何使用Zend Framework“正确”解决这个问题:
场景:
这是一个非常基本的东西,但我无法弄清楚如何使用Zend Framework“正确”解决这个问题:
场景:
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表单)
答案 0 :(得分:4)
您有三种选择:
_redirect
代替_forward
。在同一请求下转发重定向。重定向将创建一个新请求。''form' => 2.
More information. 答案 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
}
}