@Winter_Silence

Yii2. Как указать свои ссылки в правилах маршрутизации?

Приветствую!
Нужно чтобы ссылка вида /show?month=02&year=2015 вела в action perform/affichesearch
UrlManager сейчас выглядит так:
'urlManager' => [
    'enablePrettyUrl' => true,
    //'enableStrictParsing' => true,
    'showScriptName' => false,
    //'suffix' => '.php',
    'rules' => [
        ''=> '/site/index',
       'actors'=> 'employees/actors',
       'show'=> 'perform/afficheindex',
       'show?month=<month>&year=<year>' => 'perform/affichesearch',
       '<_c>/<_a>'=> '<_c>/<_a>',
       '<controller:\index>' => '<controller>/index',
       '<controller:>' => '<controller>/index',
    ],
],

Действие в контроллере есть.
Ссылка создаётся так:
Url::toRoute(['affichesearch', 'month' => $num, 'year' => $l_year]);

При попытке перейти по ссылке site.local/show?month=02&year=2015 я попадаю на страницу действия из правила 'show' => 'perform/afficheindex',
Не подскажете, в чём причина того, что меня направляет в afficheindex?
Менял порядок следования этих двух правил - ничего не изменилось.
Если убрать правило
'show?month=<month>&year=<year>' => 'perform/affichesearch',

то ссылка приобретает вид site.local/perform/affichesearch?month=02&year=2015 и при переходе по ней попадаю на нужную мне страницу.
  • Вопрос задан
  • 333 просмотра
Пригласить эксперта
Ответы на вопрос 1
sanchezzzhak
@sanchezzzhak
Ля ля ля...
show?month=&year=
Не нужно указывать достаточно в методе обьявить 2 параметра
public function actionAfficheSearch($month,$year);

Url::to(['/perform/affiche-search','month' => 12, 'year' => '2015']);

Перенаправляет потому что у вас первый show ведет на 1 метод а второй на другой show.

Поменяйте условия местами
'show?month=<month>&year=<year>' => 'perform/affichesearch',
 'show'=> 'perform/afficheindex',

В Yii приоритет правилам отдаются такой, кто первый нашел - того и тапки.
Я бы сделал фильтрацию в том же методе afficheindex или сменил show для поиска на другой урл.
Ответ написан
Ваш ответ на вопрос

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

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