我希望这条路线能够运作
forum/forum-name.9 -> controller = forum, action = index, id = forum-name.9
forum/forum-name.9/edit -> controller = forum, action = edit, id = forum-name.9
forum/rules -> controller = forum, action = rules, id = null
我试过
Route::set('default', '(/<controller>)((/<id>)(/<action>)))',
array(
'controller' => '[a-zA-Z_-]+',
'action' => '[a-zA-Z_-]+',
'id' => '[a-zA-Zа-я0-9.-]+',
))
->defaults(array(
'controller' => 'forum',
'action' => 'index',
'id'=>null
));
但它错了,因为id现在只能包含字母
答案 0 :(得分:2)
路线应该具体。不要尝试使用一条路线来完成所有事情。这些将做你想要的。
Route::set('forum/rules', 'forum/rules')
->defaults(array(
'controller' => 'forum',
'action' => 'rules',
));
Route::set('forum', 'forum/(<name>.)<id>(/<action>)',
array(
'action' => 'edit', // the action must not be present (and default to 'index') or be 'edit'
'name' => '\w+',
'id' => '\d+',
))
->defaults(array(
'controller' => 'forum',
));
此外,如果您重载某些内容并将其替换,则仅将-
添加到动作和控制器的正则表达式中。 PHP类和函数/方法名称不允许包含破折号。
答案 1 :(得分:0)
这解决了我的问题
'id' => '(\w+.)?\d+'