2011-12-23 69 views
0

我有一個主控制器,我想從這個控制器與HMVC調用子控制器。我設置了一個規則,它將參數路由到一個特定的操作,該操作使用「Request :: factory」爲主控制器調用子控制器,但由於無限循環它無法工作。有沒有辦法做到這一點?Kohana兒童控制器與HMVC

因爲主控制器發送一些信息給孩子控制器,所以我需要一個控制層,我必須使用HMVC。

這將是一種針對一個CMS CRUD應用的插件。

主控制器:http://pastebin.com/nt2fhMEy

子控制器的一個例子:http://pastebin.com/WqaHZaxf

路線:http://pastebin.com/6JGFf2i2(我沒有配置caction和CID呢。)

額外注:這將是一種我的CMS的crud模塊。主控制器將加載主模板和一些配置。另外主控制器包含一些ORM函數,並且子控制器必須能夠使用parent :: functionname。孩子們的控制器在cruds /目錄下,cms自動創建它們。

+0

如果您認爲這不是一個好方法或不明白我想要做什麼,請分享您的意見。 – 2011-12-23 22:54:06

+0

我認爲如果你解釋你爲什麼要這樣做會有所幫助。 Kohana沒有兒童控制員的概念,並且將它們一起黑客攻擊可能不是一個好主意。爲什麼你不能有沒有孩子/父母關係的簡單控制器? – 2011-12-24 03:28:01

+0

我更新了問題,謝謝。 – 2011-12-24 17:36:43

回答

2

您的控制器和HMVC的想法犯了一些錯誤。

這樣做的最好方法是使用面向對象的控制器。我的意思是「孩子控制器」需要擴展主控制器。

讓主控制器擴展Controller_Template和子控制器擴展主控制器。

當您通過路由請求發送到子控制器你將不僅有機會獲得母公司的屬性,但是你的要求將執行以下操作:

  1. 主控制器的方法
  2. 的方法之前在孩子控制器。
  3. 子控制器的動作。
  4. 經過子控制器的方法。
  5. 父控制器的方法之後。

從我從你的問題讓你不需要HMVC的。事實上,這是一個非常糟糕的數據傳遞模式。請記住,當您通過HMVC執行內部請求時,這實際上是一個全新的請求。它將再次通過路線和此列表。您將無法訪問所有先前的請求屬性。

另一個提示:不把ORM功能在主控制器。改用實際的ORM模型。

+0

謝謝,實際上我創建了一個crud模塊,當我想創建一個新的crud控制器時,我從Controller_Crud或Controller_Template_Crud擴展。現在它可以工作。 – 2012-01-07 18:02:41