urlManager роутинг

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Закрыто
Anton_Gorpinchenko
Сообщения: 6
Зарегистрирован: 2018.02.12, 14:54

urlManager роутинг

Сообщение Anton_Gorpinchenko »

Добрый день.
Помогите пожалуйста настроить роутинг, перечитал уже несколько раз документацию к urlManager и так и не разобрался.
Мне нужно чтобы ссылки вида site.com/q/somehash вели в мой UrlController в actionIndex а somehash(строка из случайных символов и цифр) передавалась в качестве переменной.

Мой конфиг выглядит сейчас вот так.

Код: Выделить всё

'urlManager' => [
            'enablePrettyUrl' => true,
            'showScriptName' => false,
            'class' => 'codemix\localeurls\UrlManager',
            'languages' => ['ru', 'en'],
            'enableDefaultLanguageUrlCode' => false,
            'rules'=>[
                '/' => 'site/index',
                '<controller:\w+>/<action:\w+>/'=>'<controller>/<action>',
                ['pattern' => 'site/statistic/<id>', 'route' => 'site/statistic'],
                ['pattern' => 'ru/site/statistic/<id>', 'route' => 'site/statistic'],
            ],
        ],
Еще я пытался сделать новый контроллер, назвать его QController, добавить в rules

Код: Выделить всё

['pattern' => 'q/<hash>', 'route' => 'q/index'],
['pattern' => 'ru/q/<hash>', 'route' => 'q/index'],
чтобы передавалось в него в actionIndex, но это не сработало.

Но при этом, если создать QQController и добавить в rules

Код: Выделить всё

['pattern' => 'q-q/<hash>', 'route' => 'q-q/index'],
['pattern' => 'ru/q-q/<hash>', 'route' => 'q-q/index'],
то с ссылками вида site.com/q-q/somehash все работает. Но мне нужны ссылки вида site.com/q/somehash.
Не могу понять, почему если контроллер состоит из двух слов, то работает, а если из одного, то не работает.

Спасибо)
Аватара пользователя
proctoleha
Сообщения: 298
Зарегистрирован: 2016.07.10, 19:00

Re: urlManager роутинг

Сообщение proctoleha »

Вот смотрите, система читает правила сверху вниз, и применяет первое подходящее.
Первая строка: '<controller:\w+>/<action:\w+>/'=>'<controller>/<action>',
Контроллер-из-одного-слова/экшен-из-одного-слова (в слове должна быть хотя бы одна буква, или цифра)

Теперь ваша ссылка: site.com/q/somehash
Подходит она под это правило? Да. Контроллер - q, экшен - somehash

Др. ссылка: site.com/q-q/somehash
Подходит под первое правило? Нет. Есть знак дефиса. используется ваше правило
['pattern' => 'q-q/<hash>', 'route' => 'q-q/index'],

Что нужно:
1. Правило '<controller:\w+>/<action:\w+>/'=>'<controller>/<action>', удалить вообще. Это стандартный разбор, он и так уже есть в системе. И отработает он в последнюю очередь.
2. Нестандартные правила ставить первыми.
Вот за что я не люблю линукс, так это за свои кривые, временами, руки
Anton_Gorpinchenko
Сообщения: 6
Зарегистрирован: 2018.02.12, 14:54

Re: urlManager роутинг

Сообщение Anton_Gorpinchenko »

proctoleha писал(а): 2018.10.18, 06:10 Вот смотрите, система читает правила сверху вниз, и применяет первое подходящее.
Первая строка: '<controller:\w+>/<action:\w+>/'=>'<controller>/<action>',
Контроллер-из-одного-слова/экшен-из-одного-слова (в слове должна быть хотя бы одна буква, или цифра)

Теперь ваша ссылка: site.com/q/somehash
Подходит она под это правило? Да. Контроллер - q, экшен - somehash

Др. ссылка: site.com/q-q/somehash
Подходит под первое правило? Нет. Есть знак дефиса. используется ваше правило
['pattern' => 'q-q/<hash>', 'route' => 'q-q/index'],

Что нужно:
1. Правило '<controller:\w+>/<action:\w+>/'=>'<controller>/<action>', удалить вообще. Это стандартный разбор, он и так уже есть в системе. И отработает он в последнюю очередь.
2. Нестандартные правила ставить первыми.
Большое спасибо. Все заработало)
Закрыто