对非必需的Kohana Route :: url使用默认路由参数

时间:2013-08-21 21:30:35

标签: kohana kohana-routing

我的路线设置如下:

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/-

注意 - 最后? 现在我可以解除它,但我希望有更好的方法。


1 个答案:

答案 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路运行所有路线。