2011-05-30 47 views
0

我在兩個不同的模塊中有兩個不同的動作,我需要在另一個模塊中執行其中的一個。symfony - 從另一個動作調用動作

考慮採取以下行動:

//first module 
class module1Actions extends sfActions { 

    protected function function1Form(sfWebRequest $request, sfForm $form) { 
     //i need to call a function from module2 in here to do sth but i don't need any view to be returned. 
     //but i need some variables to be returned by the second action 
    } 
} 

//second module 
class module2Actions extends sfActions { 

    protected function executeSth(sfWebRequest $request, sfForm $form) { 
     //Do Something in here and return some values. 
    } 
} 

因爲我說我需要執行一個動作,並從它那裏得到一些價值,但我不知道該怎麼稱呼它。它在不同的模塊中。我可以訪問它嗎?怎麼樣?以及我如何獲得值?

謝謝。

+0

你不能。這將打破MVC模式。 – Flukey 2011-05-30 08:20:56

回答

2

取決於你如何獲取這些值,這些都是最好的路徑:

  1. 如果通過對記錄或表操作得到他們,移動代碼到模型層,並呼籲從雙方你的行動

  2. 如果你讓他們其他方式(比如處理用戶輸入),你lib文件夾中創建一個實用工具類,並有將其添加爲函數,調用來自您的行爲

這樣可以防止代碼重複,並且不會中斷MVC的關注點。

+0

你能告訴醫生你如何調用和執行一個lib文件? – jpganz18 2013-04-26 01:13:26

+0

你爲什麼不[問一個問題](http://stackoverflow.com/questions/ask)? – Maerlyn 2013-04-26 05:53:13

0

我想爲Maerlyn的回答添加第三種方法。它在一些有限的情況下有用,以防止重複代碼,但也不會通過將錯誤代碼移到模型層來破壞正確的MVC設計。

  • 存儲的值發送/和/或MYUSER類返回然後使用$this->forward()調用,而不會導致瀏覽器發出另一個請求執行相關動作。

請注意,$ this-> forward()會立即停止您調用它的操作,並且轉發的操作的模板將成爲顯示的模板。

相關問題