Kohana 3.1路由与默认子目录

时间:2011-08-28 19:42:39

标签: php kohana

我有一个基本上正在运行的应用程序,直到我尝试为登录和注册实现Auth模块。

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

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

默认情况下,我想拥有可以访问Controller_Page_Test类的http://www.testsite.com/test等URL。或者显式调用将访问Controller_Admin_Test类的管理员或阻止页面http://www.testsite.com/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',
    ));

这可以更好地清理吗?如何在我需要时才启动此模块?

1 个答案:

答案 0 :(得分:1)

是的,它可以更好地清洁。 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的调用。