2012-11-06 37 views
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框架中給出解決方案。在這裏輸入代碼我怎麼能從helloAction()獲得這個$變量值到thanksAction()而不使用_redirect(),我的意思是不要發送url helloAction()給任何方法的thanksAction()如何將一個變量從一個動作傳遞給另一個動作而不重定向到Zend框架中的另一個動作(bsc)

+0

在會話或註冊表中設置$ helloAction方法的值,然後在thanksAction中使用 –

+0

bsc是什麼意思? – vascowhite

回答

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:在session或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; 
     } 
+0

謝謝你,先生你給了我很好的解決方案。 –

+0

如果它適合您,請繼續並接受答案。 – janenz00

0

janenz00已經覆蓋了幾乎所有的東西,但我想補充一點,你不應該忘記,每控制器是一個類,每個動作都是一個函數,可以這樣調用。

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

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

請注意,您正在執行helloAction的ZF世界如此兩個動作完成後,將顯示該視圖是你好視圖。當不需要actionHelper時,您也可以使用它來處理控制器內的通用邏輯/驗證/代碼。

+0

感謝它工作正常 –

3

你不應該。控制者永遠不需要彼此交談。如果有多個控制器共有的功能,則應該將其移至其中一個模型層。

你應該努力尋找那些在其中具有最小邏輯的瘦身控制器。您需要一個控制器訪問另一個控制器是一種代碼異味,表明您需要進行一些重新分解。對設計進行嚴格的批判性審視,並考慮如何避免這種情況,如果繼續這樣做,它只會變得更加複雜。

經過4年的ZF開發和10個完成的項目作爲一個獨立的開發人員,我從痛苦的經歷中發表意見,特別是在涉及到維護舊項目時。我現在有一個牢不可破的規則,控制器永遠不會共享任何東西。

+0

我只是忘了添加這一點,我的。 +1,它必須是+500 :-) – janenz00

相關問題