Php Zend框架:链接表单:我怎么能;取消设置$this->;获取请求->;isPost();?
这是一个非常基本的问题,但我不知道如何使用Zend Framework“正确”解决这个问题: 情景:Php Zend框架:链接表单:我怎么能;取消设置$this->;获取请求->;isPost();?,php,zend-framework,Php,Zend Framework,这是一个非常基本的问题,但我不知道如何使用Zend Framework“正确”解决这个问题: 情景: 页面显示表格1 页面显示表格2 这是一个非常基本的问题,但我不知道如何使用Zend Framework“正确”解决这个问题: 情景: 页面显示表格1 页面显示表格2 类FooController扩展Zend_控制器_操作{ ... 公共函数form1Action(){ 如果($this->getRequest()->isPost()){ //将form1中的数据保存到数据库中 $this->
注意:表单是“手动”生成的(不使用Zend表单)您有三个选项:
\u重定向
而不是\u转发
。在同一请求下转发重定向。重定向将创建一个新请求。”'form'=>2。
您有三种选择:
\u重定向
而不是\u转发
。在同一请求下转发重定向。重定向将创建一个新请求。”'form'=>2。
您可以在操作一中设置一个类变量,如果它为真,则不要在操作二中运行代码 比如:
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
}
}
您可以在操作一中设置一个类变量,如果它为真,则不要在操作二中运行代码 比如:
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
}
}
最后一个选项对我不起作用 $this->_forward()创建控制器的新实例,因此在第一个实例中设置变量不会影响新实例中的变量 我的解决方案是将$u fromAction1设置为静态,以便在两个实例之间共享变量
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
}
}
最后一个选项对我不起作用 $this->_forward()创建控制器的新实例,因此在第一个实例中设置变量不会影响新实例中的变量 我的解决方案是将$u fromAction1设置为静态,以便在两个实例之间共享变量
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
}
}
您是否应该在某个时候使用
isValid()
?这将阻止您在发布form1时处理form2中的数据,当然,除非它们完全相同。或者使用Zend在这里记录的内置多页表单非常有意义,但在这种情况下,表单是“手动”构建的,即不使用Zend_表单……您是否应该在某个时候使用isValid()
?这将阻止您在发布form1时处理form2中的数据,当然,除非它们完全相同。或者使用Zend在这里记录的内置多页表单非常有意义,但在这种情况下,表单是“手动”构建的,即不使用Zend_表单…这就是我目前解决问题的方式,但我不满意此解决方案,因为创建新请求意味着服务器承受更大的压力。我想避免这个…-)我已经更新了答案,加入了一个新选项。选项#2,如果您仍想使用#forward,它将为您提供一个解决方案。这就是我目前解决问题的方式,但我不满意此解决方案,因为创建新请求意味着服务器承受更大的压力。我想避免这个…-)我已经更新了答案,加入了一个新选项。选项#2,如果您仍然想使用#U forward,它将为您提供解决方案。