@alex99505

Как прописать получение GET параметры в Route Yii?

Хочу получить в контроллере GET параметры стандартным путем:
Yii::$app->request->get('aID', '');
Yii::$app->request->get('aTitle', '');


Нашел только жестко прописать
Запрос
test.com/article/description?aID=323&aTitle=teaser...
правило
'article/description/<aID:\d+>/<aTitle>' => 'article/description'


Но как быть, если некоторые переменные не всегда будут, к примеру момент, когда aTitle будет отсутствовать. Как тогда, создавать два правила?
А как быть если в запросе будут переставлены местами aID и aTitle, сработает ли тогда также нормально то же правило?
'article/description/<aID:\d+>/<aTitle>' => 'article/description'
  • Вопрос задан
  • 296 просмотров
Решения вопроса 1
@davidnum95
Нужно различать path и query параметры.
Например:
http://test.com/article/description?aID=323&aTitle=teaser+of+this+article

Здесь aID=323&aTitle=teaser+of+this+article это query параметры.
Соответственно в роуте их указывать не нужно:
'article/description' => 'article/description'
Они передаются в экшен в неявном виде.
public function actionDescription($aID, $aTitle, $something, $else) {}

В этом случае все query параметры будут обязательными. Чтобы это изменить нужно задать значения по умолчанию:
public function actionDescription($aID, $aTitle = null, $something = 'default', $else = 1) {}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
OKyJIucT
@OKyJIucT
Sunshine reggae
Создавайте URL с помощью Url::to, и всегда указывайте одинаковый порядок параметров, и все будет корректно работать. тогда можно будет обойтись всего двумя правилами в UrlManager.

Либо создавайте свои правила для парсинга URL и сможете обрабатывать их даже если порядок будет произвольным. Грубый пример можно найти здесь https://yiiframework.com.ua/ru/doc/guide/2/runtime...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы