2010-12-17 2 views
1

私はこのようなルートがある場合:Kohanaの3つのルーティングとクエリ文字列

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 

しかし、前のように、あなたは他のクエリ文字列に追加することができますあなたは欲しい。

これらの無効なクエリ文字列を404ページに送信するすべての経路をキャッチする方法はありますか?あるいは、私は文字通りすべてのコントローラを通過して$ _GETのチェックを行い、それらが実際に存在することを確認する必要がありますか?

答えて

2

ルートを使用してクエリパラメータにアクセスすることはできません。

ルートは完全にクエリ文字列から隔離されているので、mod_rewriteを使用するときにはルートを使用しないでください。クエリパラメータにアクセスするには、次を使用する必要があります。

$order = $this->request->query('order'); 
関連する問題