2010-12-17 85 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');