0
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
}

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

4

3 回答 3

4

有不同的选择,所有这些都取决于您的确切要求:

选项 1:转发 - 从问题来看,您似乎想先执行 helloAction,然后执行 ThanksAction(),以便将 $a 设置为 10,然后传递给 ThanksAction。为此,您可以使用 _forward 方法。它不会更改 url,但会将执行传递给指定的操作。

       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.`

选项 2:将变量 $a 设置为类参数,在您的操作中使用 $this 访问它。

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

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

选项 3:在会话或 Zend 注册表中设置值并在需要的地方访问。

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

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

      }
      protected function processA($a) {
            $b = 20;
            $b = $b + $a; 
            return $b;
      }
于 2012-11-06T18:32:32.390 回答
3

你不应该这样做。控制器永远不需要相互交谈。如果存在多个控制器共有的功能,则应将其移至模型层之一。

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

经过 4 年的 ZF 开发和 10 个完成的项目,作为一个单独的开发人员,我从痛苦的经历中说出来,尤其是在维护旧项目时。我现在有一个牢不可破的规则,即控制器从不共享任何东西。

于 2012-11-06T19:00:20.617 回答
0

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

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

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

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

于 2012-11-06T18:48:32.880 回答