Kohana路由 - 子文件夹

时间:2012-01-06 11:05:19

标签: php routing kohana

HY。 我有2个控制器,第一个是 application / classes / controller / welcome.php ,第二个是 application / classes / controller / admin / welcome.php

我有以下路由,在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 ,则会从 application / classes / controller / welcome.php 控制器调用 index 操作(此操作很好), 如果我访问 example.com/admin/welcome ,它会从 application / classes / controller / admin / welcome.php 控制器调用 index 操作(这个很好),

但如果我只是访问 example.com ,它会调用admin的欢迎而不是另一个,我无法理解为什么。

我想要这个:如果我访问 example.com ,那么从 application / classes / controller / admin / welcome.php index 操作>控制器。 我该如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

看起来您已将第一个路径中的目录标记设置为可选,因此在未指定目录时匹配。尝试:

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

这应该使标签成为强制性的,因此在/.

上不匹配

答案 1 :(得分:0)

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