Zend framework 在Zend framework(bsc)中,如何在不重定向到另一个操作的情况下将变量从一个操作传递到另一个操作

Zend framework 在Zend framework(bsc)中,如何在不重定向到另一个操作的情况下将变量从一个操作传递到另一个操作,zend-framework,Zend Framework,在zend框架中给出解决方案。在此处输入代码`如何在不使用重定向()的情况下从helloAction()到thanksAction()获取$a变量值,我的意思是不要通过任何方法将url helloAction()发送到thanksAction()有不同的选项,所有这些都取决于您的具体要求: 选项1:向前-从问题来看,您似乎希望先执行helloAction,然后执行thanksAction(),这样$a就被设置为10,然后传递给thanksAction。为此,您可以使用_forward方法。它不会

在zend框架中给出解决方案。在此处输入代码`如何在不使用重定向()的情况下从helloAction()到thanksAction()获取$a变量值,我的意思是不要通过任何方法将url helloAction()发送到thanksAction()

有不同的选项,所有这些都取决于您的具体要求:

选项1:向前-从问题来看,您似乎希望先执行helloAction,然后执行thanksAction(),这样$a就被设置为10,然后传递给thanksAction。为此,您可以使用_forward方法。它不会更改url,但会将执行传递给指定的操作

public function helloAction() {
    $a =10;

}
public function thanksAction() {
    $b = 20;
    $b = $b + $a; //`enter code here` how can i get this $a variable value from helloAction() to thanksAction()
// without use _redirect() and i mean don't send url helloAction() to thanksAction() by any method
}
选项2:将变量$a设置为类参数,在操作中使用$this访问它

       public function helloAction() {
               $a =10;
               $this->_forward("thanks","index", null, array('a' => $a));
        }
        public function thanksAction() {
               $a = $this->_getParam("a");
               $b = 20;
               $b = $b + $a; 
         }
 Note the _forward() will process all statements in helloAction(), skip its view script, and process all the statements in thanksAction and display its view script.`
选项3:在会话或Zend注册表中设置值,并在需要时访问

正如@vascowhite在回答中指出的那样,如果您遇到需要在操作之间传递参数的情况,而不是通过GET、POST或SESSION,那么您可能会遇到一些设计问题。您可以做的一件事是将语句移动到常规函数并从helloAction调用它,如:

      public function helloAction() {
            $this->a =10;

      }
      public function thanksAction() {
            $b = 20;
            $b = $b + $this->a; 
      }

janenz00几乎涵盖了所有内容,但我想补充一点,您不应该忘记,每个控制器都是一个类,每个动作都是一个函数,可以这样调用

     public function helloAction() {
            $a =10;
            $c = $this->processA($a);

      }
      protected function processA($a) {
            $b = 20;
            $b = $b + $a; 
            return $b;
      }

请注意,在ZF世界中,您正在执行helloAction,因此两个操作完成后将显示的视图是hello视图。当不需要actionHelper时,您也可以使用它来处理控制器中的公共逻辑/验证/代码。

您不必这样做。控制器不应该需要彼此交谈。如果有多个控制器共用的功能,则应将其移动到其中一个模型层中

您应该努力寻找具有最少逻辑的精简控制器。您需要一个控制器访问另一个控制器,这是一种代码气味,表明您需要进行一些重新分解。认真、批判性地审视一下您的设计,并思考如何避免这种情况,如果您继续这样做,它只会变得更加复杂


经过4年的采埃孚开发和10个已完成的项目作为一个单独的开发人员,我从痛苦的经验,特别是当谈到维护旧项目。我现在有一条牢不可破的规则,控制器永远不会共享任何东西。

在helloAction方法的会话或注册表中设置$a值,然后在ThanksAction中使用这个值你说的bsc是什么意思?我只是忘了将这一点添加到我的值中。Did+1,必须是+500:-)
      public function helloAction() {
            $a =10;
            $this->thanksAction($a);

      }
      public function thanksAction($a) {
            $b = 20;
            $b = $b + $a; 
      }