2010-02-28 90 views
0

我有一個「管理員」模塊,我希望它爲「動態控制器」服務,即爲不存在的控制器(「虛擬控制器」)提供默認行爲。「管理模塊」接管Yii框架

我發明了一個輕量級消息傳遞機制,用於模塊之間的鬆散通信。我想使用它,例如,當

?r=admin/users/index 

被請求時,它會調用「AdminModule的,這將在默認情況下,使用此消息機制,通知真正的模塊」中的「虛擬控制器」「UserController的UsersModule」就可以回答的請求。

我想過在AdminModule :: init()中模擬這種行爲,但是在那個時候,我沒有辦法決定動作是否可以被真實控制器處理,或者至少我不知道如何去做吧。

這是因爲Yii的工作方式:自下而上,控制器是呈現視圖和應用程序佈局(或模塊,如果存在)的控制器。我不認爲該模塊甚至沒有關於處理給定的控制器+操作的話。回顧一下,我正在尋找一種CWebModule :: missingController($ controllerId,$ actionId),就像CController :: missingAction($ actionId)一樣,或者是一個解決方法來模擬這個。

這將可能是CWebModule ::的init()或地方在那裏我可以找出

  1. 控制器是否實際存在,在這種情況下,這是他的工作來處理它
  2. 的$ actionID和$ controllerID
  3. 模塊$ controllerID是否存在(我沒有輸入錯誤,在r = admin/users/index中,「users」是實際模塊,如應用程序配置中指定的那樣)。

回答