我有一个基本上正在运行的应用程序,直到我尝试为登录和注册实现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',
));
这可以更好地清理吗?如何在我需要时才启动此模块?
答案 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的第一部分与user
或admin_user
相等。以前控制器部分是可选的,因此也匹配对/
URI的调用。