0

我有一个如下所示的路线设置:

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

因此,如果我将 name 设置为null,我会得到相同的结果。如果我将 name 设置为false,则没有错误消息,但 url 如下所示:

/r/welcome/test/-

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


4

1 回答 1

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 条路线运行所有内容。

于 2013-08-22T08:48:52.297 回答