2011-11-12 38 views
1

Kohana 3.2被設計爲支持HMVC設計模式。 HMVC模式由嵌套的MVC三元組組成。然而據我所知,Kohana的級聯文件系統要求所有的模型和控制器都放置在頂級'classes'目錄中,並將Views放置到頂部'views'目錄中。如果模型/控制器在文件系統的頂層與視圖分離,那麼我們應該如何實現嵌套的MVC三元組?如何使用Kohana的級聯文件系統實現HMVC

enter image description here

+0

這些圖表只表示邏輯繼承,並且只在控制器中表示。物理分離對此有何影響?你有什麼嘗試? – arootbeer

+0

我的假設/希望是可以在文件系統中實現HMVC模式的物理表現以反映邏輯模式。否則,控制器將指向所有地方,HMVC的模塊化優勢將會丟失。 – Yarin

回答

2

不知道如果你想破解該意見處理方式,但你可以擴展Kohana_View類,以便set_filename()函數將接受任何你想要的目錄。

如果您想要一個類似於控制器/模型的自動加載功能,您可以自己實現它。

例如(未經測試):

public function set_filename($view) 
{   
    // Transform the class name into a path 
    $file = str_replace('_', '/', strtolower($view)); 

    if ($path = Kohana::find_file('classes', $file)) 
    { 
     // Store the file path locally 
     $this->_file = $path; 

     return $this; 
    } 

    throw new View_Exception('The requested view :view could not be found', array(
     ':view' => $view, 
    )); 
} 
+0

@ Nathan-謝謝。我只是不認爲我需要破解級聯文件系統,因爲它應該是建立在HMVC的基礎之上的......但是看起來你可能是對的,這是實現它的唯一方法 - 有點奇怪。 – Yarin

+0

請勿將View類的模板放入專用於類文件的文件夾中。我認爲我現在明白你想要什麼,編輯即將到來。 – Darsstar

+0

我以爲Yarin想要一種方式來存儲視圖模板與組織控制器/模型,並仍然保持默認的Kohana功能(即使用'View :: factory($ filename)'')。當然,最好是實現一個結構,它將在控制器/模型旁邊添加視圖類,並將模板保留在別處。 – Nathan

2

然而,據我所知,Kohana系統的級聯文件系統要求所有的模型和控制器放置頂「類」目錄中,並瀏覽到頂部的'views'目錄。

你似乎想要的是像Kohana 2,codeigniter和最有可能的其他框架,它有控制器,模型和視圖的專用文件夾的文件夾結構。 Kohana 3有一個專門的課程文件夾。 Kohana 3的構建方式強制控制器應該有一個Controller_前綴。 Kohana 3自動加載器將在類/控制器文件夾中查找帶有Controller_前綴的類。

然後Kohana 3還帶有非常基本的模型和視圖類。就我所知,Kohana 3核心不使用Model類,它僅在少數情況下使用View類。但是Model的前綴模型的約定可以在Model :: factory()中找到,但是它沒有被強制執行。你不必使用它們。

View類在de views文件夾中查找模板。 (由Zombor推薦)Zombor(開發人員之一)的View_Module也發生在那裏。 (由Zombor重新調整)KOstache模塊,同樣由Zombor在模板文件夾中查找它的模板。兩個模塊都允許您創建視圖模型類,其約定具有View_前綴,以便它們以類/​​視圖結束。但是沒有什麼能阻止你創建一個View_類,它將View的每個模板擴展到View文件夾中,並對該View-Model的路徑進行硬編碼。

請尊重classes文件夾僅適用於課程。

+0

@ Darsstar-我認爲你的意思是:雖然Kohana 2文件系統允許在文件系統中嵌套MVC三元組,但Kohana 3強制從Views中分離模型控制器類排除了它? – Yarin

+0

如果您選擇僅將View類用作視圖模型,則選擇將邏輯移至模板。如果您要爲每個模板創建視圖模型並將邏輯放入這些視圖模型中。然後模板只能控制應該去哪裏。由於View-Models是類,它們應該進入classes文件夾。因爲你明確地希望他們都在同一個子文件夾中,你應該給他們View_前綴。然後你得到你想要的分離。所以你在鼓勵,而不是Kohana。 Kohana剛剛帶來了一個糟糕的View-Model。 – Darsstar

相關問題