Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Zend框架:链接表单:我怎么能;取消设置$this->;获取请求->;isPost();?_Php_Zend Framework - Fatal编程技术网

Php Zend框架:链接表单:我怎么能;取消设置$this->;获取请求->;isPost();?

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 Framework“正确”解决这个问题:

情景:

  • 页面显示表格1
  • 页面显示表格2
  • 这是一个非常基本的问题,但我不知道如何使用Zend Framework“正确”解决这个问题:

    情景:

  • 页面显示表格1
  • 页面显示表格2
  • 类FooController扩展Zend_控制器_操作{ ... 公共函数form1Action(){ 如果($this->getRequest()->isPost()){ //将form1中的数据保存到数据库中 $this->_forward('form2'); } //显示表格1 } 公共函数form2Action(){ 如果($this->getRequest()->isPost()){ //将form2中的数据保存到数据库中 $this->_向前('somewherese'); } //显示表格2 } } 当用户发布form1时,首先执行form1Action中的if条件(这是我想要的),但也执行form2Action中的if条件

    “取消设置$this->getRequest()->isPost()”的正确方法是什么


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

    您有三个选项:

  • 使用
    \u重定向
    而不是
    \u转发
    。在同一请求下转发重定向。重定向将创建一个新请求。”
  • 在转发呼叫中设置一个参数,您可以在第二个表单中检查该参数:例如
    'form'=>2。
  • 使用Zend_表格中包含的开箱即用

  • 您有三种选择:

  • 使用
    \u重定向
    而不是
    \u转发
    。在同一请求下转发重定向。重定向将创建一个新请求。”
  • 在转发呼叫中设置一个参数,您可以在第二个表单中检查该参数:例如
    'form'=>2。
  • 使用Zend_表格中包含的开箱即用

  • 您可以在操作一中设置一个类变量,如果它为真,则不要在操作二中运行代码

    比如:

    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,它将为您提供解决方案。