2012-01-06 122 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

您指定的路线从上到下进行匹配:将使用第一个匹配的路线。所以,交换你的路线,它应该工作(使'管理'路线的最后一个)。