如何在Kohana 3.3中正确设置路线,其中我的控制器和目录的名称与下面的示例相同?
/application/classes/Controller/Admin/Author.php - admin/author - admin/author/add - admin/author/edit /application/classes/Controller/Admin/Author/Book.php - admin/author/book - admin/author/book/add - admin/author/book/edit
按指定顺序使用以下路线时,我只能访问 admin / author {/ action} ,但 管理员/作者/书{/动作} 的
撤消路由订单可让我访问 admin / author / book {/ action} ,但不能 admin / author {/ action} 的
Route::set('admin', 'admin(/<controller>(/<action>(/<id>)))')
->defaults(array(
'directory' => 'admin',
'controller' => 'Main',
'action' => 'index',
));
Route::set('admin/author', 'admin/author(/<controller>(/<action>(/<id>)))')
->defaults(array(
'directory' => 'admin/author',
'controller' => 'Main',
'action' => 'index',
));
答案 0 :(得分:3)
你需要这样的东西:
Route::set('admin-author', '<directory>/<controller>(/<action>(/<id>))', array(
'directory' => '(admin|admin/author)',
'action' => '(add|edit|delete|index)'
))
->defaults(array(
'directory' => 'admin',
'controller' => 'author',
));
此外,您可以尝试使用正则表达式^book
检查操作(未经测试)。
另一种方法是使用Route filters。
答案 1 :(得分:0)
您还需要为admin / author / book定义
Route::set('admin-author-book', 'admin/author(/<controller>(/<action>(/<id>)))')
->defaults(array(
'directory' => 'admin/author',
'controller' => 'book',
'action' => 'index',
));
Route::set('admin-author-book', 'admin/author(/book(/<action>(/<id>)))')
->defaults(array(
'directory' => 'admin/author',
'controller' => 'book',
'action' => 'index',
));
答案 2 :(得分:0)
关于路线最重要的事情:路线按照添加顺序进行匹配。撤消路线的顺序是正确的,但问题是您的路线admin/author
也匹配admin/author{/action}
。您可以做什么:强制执行控制器和操作:
// Does not match admin/author/add
Route::set('admin/author', 'admin/author/<controller>/<action>(/<id>)')
->defaults(array(
'directory' => 'admin/author',
));
Route::set('admin', 'admin(/<controller>(/<action>(/<id>)))')
->defaults(array(
'directory' => 'admin',
'controller' => 'Main',
'action' => 'index',
));
有几种方法,另一种方法是创建控制器的“白名单”:
// Does not match admin/author/add
Route::set('admin/author', 'admin/author/<controller>(/<action>(/<id>))',
array(
'controller' => '(book|another-controller)'
))
->defaults(array(
'directory' => 'admin/author',
));
Route::set('admin', 'admin(/<controller>(/<action>(/<id>)))')
->defaults(array(
'directory' => 'admin',
'controller' => 'Main',
'action' => 'index',
));