Kohana 3路由和查询字符串

时间:2010-12-17 22:35:11

标签: query-string kohana-3 routes

如果我有这样的路线:

Route::set('test', 'test')
    ->defaults(array(
        'controller' => 'test',
        'action' => 'index'
    ));

我假设只有url mysite.com/test或mysite.com/test/会被发送到此路由,其他任何内容都会被发送到默认路由,或者如果你有一个就捕获所有路由。但是,您可以使用任何查询字符串,它仍然有效。例如,任何这些都可行:

mysite.com/test/?abc
mysite.com/test/?abc=123
mysite.com/test/?abc=123&blabla=lala

基本上你想要的任何东西。如何设置它以使测试路由与查询字符串的URL不匹配?另一个例子可能是:

Route::set('test', 'test(/?order=<order>)', array('order' => 'title|date|author'))
    ->defaults(array(
        'controller' => 'test',
        'action' => 'index'
        'order' => 'title'
    ));

在这个例子中,我假设唯一匹配此路由的URL是:

mysite.com/test/?order=title
mysite.com/test/?order=date
mysite.com/test/?order=author

但和以前一样,你可以添加你想要的任何其他查询字符串。

有没有办法让这些无效的查询字符串传递给catch所有路由,将它们发送到404页面?或者我真的必须通过我的所有控制器并检查$ _GET并确保它们确实存在?

1 个答案:

答案 0 :(得分:2)

您不应该使用您的路由访问查询参数。

路由与查询字符串完全隔离,不要尝试使用它们,因为您使用的是mod_rewrite。要访问查询参数,您应该使用:

$order = $this->request->query('order');