我有一个应用程序,基本上是工作,直到我试图实现登录和注册的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的第一部分是给定的,并且等于user
或admin_user
。以前控制器部分是可选的,因此也匹配/
URI的调用。