2013-10-22 92 views
0

我是Kohana的新手,但現在已閱讀用戶指南約兩週。我在v3.3.1上構建了一個巨大的應用程序,它將有許多不同的模塊(即駐留在模塊目錄中)。我正在努力讓路線按照我需要的方式工作。Kohana 3個別模塊的路徑

首先,值得一提的是,我已閱讀了關於路由,模塊,引導程序等的用戶指南。我將route :: set放在模塊內的init.php文件中,因此它在「 bootstrap.php文件中的「default」選項。這是我有...

目錄:

應用>類>控制器>的welcome.php

模塊>模塊1>類>控制器> Home.php

路線

在module1 init.php文件中:

Route::set('module1', 'module1(/<controller>(/<action>))') 
->defaults(array(
    'controller' => 'Home', 
    'action'  => 'index', 
)); 

在bootstrap.php中的文件:

Route::set('default', '(<controller>(/<action>(/<id>)))') 
->defaults(array(
    'controller' => 'welcome', 
    'action'  => 'index', 
)); 

當我去到localhost/index.php文件/模塊1 /它運行模塊的主控制器。

當我去localhost/index.php它確實在應用程序目錄中運行歡迎控制器。

但是,如果我去localhost/index.php/home它也運行該模塊的主控制器。我不希望它這樣做。我只希望在URI爲localhost要運行的模塊控制器/ index.php文件/模塊1/控制器

我知道這是默認路由拿起模塊的控制器,但我不知道如何停止它從做到這一點,或者即使這是可能的!

如果有人以這種方式使用模塊的經驗,請你能幫助我嗎?你的時間非常感謝。

非常感謝, 史蒂夫

回答

2

您使用的是默認的路由,這是一個包羅萬象的路線。你應該做的,就是改變路線,使你的捕捉全部侷限於你的主應用程序中的控制器。這可以通過用正則表達式添加第三個參數來完成。

例子:

Route::set('module1', 'module1(/<controller>(/<action>))') 
->defaults(array(
    'controller' => 'Home', 
    'action'  => 'index', 
)); 


Route::set('main-app', '(<controller>(/<action>(/<id>)))', 
array(
    'controller' => '(welcome|login|posts)' 
)) 
->defaults(array(
    'controller' => 'welcome', 
    'action'  => 'index', 
)); 

如果我是你,我甚至會向上突破的路線,並進一步提出具體路線爲您的控制器。

但請注意,您不能在主應用程序和模塊中使用相同的控制器名稱。有了這些路線(可能全部),即使路線與模塊控制器相匹配,Kohana也會始終覆蓋並使用主應用程序控制器(由於級聯文件系統)。

我希望這會有所幫助,如果您還有其他問題,請留下評論。

+0

非常感謝你馬努拉斯,這按預期工作。爲了克服使用相同的控制器名稱,我正在考慮在模塊名稱前加上任何模塊控制器名稱。例如,主應用程序控制器可以被稱爲「歡迎」和稱爲「Module1_Welcome」的模塊。你會推薦這種方式,還是有更好的方法? – SigmaSteve

+0

這是一個很好的方法。我認爲大部分都是這樣做的。你也可以在模塊控制器文件夾中使用目錄,但這取決於你。選擇你喜歡的。 – Manuras

+0

玩了一段時間後,我選擇了使用目錄。在模塊名稱前加上控制器名稱看起來很亂。我在控制器文件夾內創建了一個module1目錄,現在我的模塊路由看起來像Route :: set('module1','module1(/ (/ (/ )))'',默認'directory'=> 「模塊1」。完美地工作,並應該捕捉每個模塊的所有請求。非常感謝你的幫助。 – SigmaSteve