2010-12-17 84 views
1

如果我有这样的路线:Kohana的3个路由和查询字符串

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

我以为,只有网址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 

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

有没有办法让这些无效的查询字符串传递到捕获所有的路线,他们将被发送到404页面?或者我是否真的必须通过我的所有控制器并对$ _GET进行检查并确保它们确实存在?

回答

2

你不应该使用你的路线访问查询参数。

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

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