2012-01-06 119 views
0

Hy。 我有2個控制器,第一個是application/classes/controller/welcome.php,第二個是application/classes/controller/admin/welcome.phpKohana路由 - 子文件夾

而且我有以下的路線,在bootstrap.php中

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

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

設置如果我訪問example.com/welcome它調用指數從應用程序/班/控制器/歡迎行動。 php控制器(這很好), 如果我訪問example.com/admin/welcome它調用索引動作來自application/classes/controller/admin/welcome.php控制器(這是好的),

,但如果我只是訪問example.com ,它調用管理員的歡迎,而不是另外一個,我不明白爲什麼。

我想:如果我訪問example.com,然後調用指數行動從應用/班/控制器/管理/的welcome.php控制器。 我該如何解決這個問題?

+0

我的答案在下面有幫助嗎? – Sean 2012-01-10 11:04:39

+0

絕對!謝謝 – 2012-01-10 11:27:19

+0

非常好,很高興幫助:)如果您可以將問題標記爲已回答,那麼它將使未來人們更容易找到問題以找到解決方案。謝謝! – Sean 2012-01-10 14:08:04

回答

2

看起來您已經將第一個路徑中的目錄標記設置爲可選,因此當沒有指定目錄時它是匹配的。嘗試:

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

這應該使標記爲必填項,因此它不會與/匹配。

0

您指定的路線從上到下進行匹配:將使用第一個匹配的路線。所以,交換你的路線,它應該工作(使'管理'路線的最後一個)。