我的路线设置如下:
Route::set('my_route', 'r/<controller>(/<action>)(/(<name>-)<hash>)', array(
'controller' => '[a-z]+',
'action' => '[a-z]+',
'hash' => '\w{13}',
'name' => '[a-z]+',
))->defaults(array(
'directory' => 'my_dir',
'controller' => 'welcome',
'action' => 'index',
'name' => null,
));
哪个有效。当我尝试从路由构建URL时,问题出现了,如下所示:
return Route::url('my_route', array(
'action' => 'test',
));
我收到此错误消息:
Kohana_Exception [ 0 ]: Required route parameter not passed: name
因此,如果我将名称设置为null
,我会得到相同的结果。
如果我将名称设置为false
,则没有错误消息,但网址如下所示:
/r/welcome/test/-
注意 - 最后? 现在我可以解除它,但我希望有更好的方法。
答案 0 :(得分:1)
在我看来,您正试图通过使用1路由来修复您的路由。这不是正确的做事方式。
只需制作多条路线(也许你必须调整一下):
Route::set('my_route', 'r/<controller>(/<action>)/(<name>-)<hash>', array(
'controller' => '[a-z]+',
'action' => '[a-z]+',
'hash' => '\w{13}',
'name' => '[a-z]+',
))->defaults(array(
'directory' => 'my_dir',
'controller' => 'welcome',
'action' => 'index',
'name' => null,
));
Route::set('my_route2', 'r/<controller>(/<action>)', array(
'controller' => '[a-z]+',
'action' => '[a-z]+',
'hash' => '\w{13}',
'name' => '[a-z]+',
))->defaults(array(
'directory' => 'my_dir',
'controller' => 'welcome',
'action' => 'index',
'name' => null,
));
请记住,路线系统非常强大,而且更多的路线并不意味着它变慢。因此,只需制作尽可能多的明确路线,不要试图通过1路运行所有路线。