Kohana 3.1使用默认子目录路由


Kohana 3.1 routes with default subdirectories

我有一个应用程序,基本上是工作,直到我试图实现登录和注册的Auth模块。

我的应用程序目录结构基本上是:

application
-- classes
  -- controller
     -- admin
        (admin area)
     -- block
        (blocks to display within pages)
     -- page
        (default pages)

默认情况下,我想有URL的,如http://www.testsite.com/test将访问Controller_Page_Test类。或者显式地调用admin或block页面http://www.testsite.com/admin/test,这将访问Controller_Admin_Test类。更复杂的是,它还需要处理可选操作和id。

我在顶部说,这基本上是正确的工作-直到我试图在Auth模块中添加。Auth模块调用http://www.testsite.com/user/login,但不是通过默认方式访问模块的路径,而是在页面目录中查找。

为了克服这个问题,我放置了一个更高级别的路由,但现在这已经成为我的默认页面处理程序。显式呼叫仍然可以通过。

我的路由现在是这样的:

Route::set('user', '(<controller>(/<action>(/<id>)))', array('controller' => 'user|admin_user'))
    ->defaults(array(
        'controller' => 'user',
        'action'     => 'index',
        'id'         => NULL,
    ));
Route::set('with_dir', '<directory>/<controller>(/<action>(/<id>))', array('directory' => 'block|admin'))
    ->defaults(array(
        'directory'  => 'page',
        'controller' => 'home',
        'action'     => 'index',
    ));
Route::set('just_id', '<controller>(/<id>)', array('id' => ''d+'))
    ->defaults(array(
        'directory'  => 'page',
        'controller' => 'home',
        'action'     => 'index',
    ));
Route::set('auto_dir', '<controller>(/<action>(/<id>))', array('id' => ''d+'))
    ->defaults(array(
        'directory'  => 'page',
        'controller' => 'home',
        'action'     => 'index',
    ));

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

这个能清理得更好吗?我如何让这个模块只踢在我需要它吗?

是的,可以清洗得更好。Kohana开发人员鼓励人们使用这个框架添加尽可能多的路由。您甚至可以为每个操作指定它们,这将使您能够在将来更改url(例如。而不是/user/login,你可能希望有/signin),如果你使用适当的方法来生成链接等(例如。Route::url()助手)。

现在,说到这里,这里是指定user路由的另一种方法:

Route::set('user', '<controller>(/<action>(/<id>))', array('controller' => '(user|admin_user)'))
    ->defaults(array(
        'controller' => 'user',
        'action'     => 'index',
    ));

它将只匹配请求,其中URI的第一部分是给定的,并且等于useradmin_user。以前控制器部分是可选的,因此也匹配/ URI的调用。