Kohana 3 строки маршрутизации и запросов - PullRequest
1 голос
/ 18 декабря 2010

Если у меня есть маршрут, подобный этому:

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 и убедиться, что они действительно существуют?

1 Ответ

2 голосов
/ 25 апреля 2011

Вы не должны получать доступ к параметрам запроса, используя ваши маршруты.

Маршруты полностью изолированы от строки запроса, не пытайтесь использовать их так же, как и mod_rewrite. Для доступа к параметрам запроса вы должны использовать:

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