Modules: URL Rules

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Аватара пользователя
Besedin
Сообщения: 88
Зарегистрирован: 2012.07.30, 11:09
Откуда: Kyiv

Modules: URL Rules

Сообщение Besedin »

Помогите разобраться. Не могу никак настроить правила url rules.
У меня есть как контроллеры так и модули на одном уровне. В каждом модуле будет DefaultController.
Index экшены просто оставляют id контроллера, а если он в модуле и принадлежит DefaultController, так вообще id модуля. Для экшена view тоже отсекается его id и остается только <id контроллера>/<id>

Набросал вот таких правил. По моей логике должно было работать :)

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

'urlManager' => [
        'enablePrettyUrl' => true,
        'showScriptName' => false,
        'rules' => [
            '<module:\w+>' => '<module>/default/index',
            '<module:\w+>/<id:\d+>' => '<module>/default/view',
            '<module:\w+>/edit/<id:\d+>' => '<module>/default/edit',
            '<module:\w+>/delete/<id:\d+>' => '<module>/default/delete',
            '<module:\w+>/<controller:\w+>' => '<module>/<controller>/index',
            '<module:\w+>/<controller:\w+>/<id:\d+>' => '<module>/<controller>/view',
            '<module:\w+>/<controller:\w+>/edit/<id:\d+>' => '<module>/<controller>/edit',
            '<module:\w+>/<controller:\w+>/delete/<id:\d+>' => '<module>/<controller>/delete',
            '<module:\w+>/<controller:\w+>/<action:\w+>/<id:\d+>' => '<module>/<controller>/<action>',
            '<controller:\w+>' => '<controller>/index',
            '<controller:\w+>/<id:\d+>' => '<controller>/view',
            '<controller:\w+>/edit/<id:\d+>' => '<controller>/edit',
            '<controller:\w+>/delete/<id:\d+>' => '<controller>/delete',
            '<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>',
        ]
    ],
 
В результате /module правильно указывает на /module/default/index, а вот /controller/create указывает на /controller/create/index
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Modules: URL Rules

Сообщение zelenin »

'<module:\w+>/<controller:\w+>' => '<module>/<controller>/index',

срабатывает первое подходящее правило
Аватара пользователя
VaNnOrus
Сообщения: 96
Зарегистрирован: 2014.10.09, 12:50

Re: Modules: URL Rules

Сообщение VaNnOrus »

Как уже сказал @zelenin - более общие правила срабатывают раньше более частных. Пишите правила в обратном порядке.

К чему писать отдельно правила для edit/delete, если есть правило с <action:\w+> ?
Аватара пользователя
Besedin
Сообщения: 88
Зарегистрирован: 2012.07.30, 11:09
Откуда: Kyiv

Re: Modules: URL Rules

Сообщение Besedin »

Спасибо всем, разобрался. Теперь наконец-то научился правильно составлять правила.
Так все работает как надо:

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

'rules' => [
            '<action:(login|logout)>' => 'site/<action>',
            '<module:(product)>' => '<module>/default/index',
            '<module:(product)>/<id:\d+>' => '<module>/default/view',
            '<module:(product)>/edit/<id:\d+>' => '<module>/default/edit',
            '<module:(product)>/delete/<id:\d+>' => '<module>/default/delete',
            '<module:(product)>/<controller:\w+>/<id:\d+>' => '<module>/<controller>/view',
            '<module:(product)>/<controller:\w+>/edit/<id:\d+>' => '<module>/<controller>/edit',
            '<module:(product)>/<controller:\w+>/delete/<id:\d+>' => '<module>/<controller>/delete',
            '<module:(product)>/<controller:\w+>/<action:\w+>/<id:\d+>' => '<module>/<controller>/<action>',
            '<module:(product)>/<controller:\w+>' => '<module>/<controller>/index',
            '<controller:\w+>/<id:\d+>' => '<controller>/view',
            '<controller:\w+>/edit/<id:\d+>' => '<controller>/edit',
            '<controller:\w+>/delete/<id:\d+>' => '<controller>/delete',
            '<controller:\w+>' => '<controller>/index',
            '<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>',
        ]
 
Как уже сказал @zelenin - более общие правила срабатывают раньше более частных. Пишите правила в обратном порядке.
Да, да, я уже это понял
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Modules: URL Rules

Сообщение zelenin »

кстати, я писал бы вот так: <module:[\wd-]+> - в названии модуля вполне может быть черточка или цифра (PostAdminV2Module => post-admin-v2)
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Modules: URL Rules

Сообщение zelenin »

вообще составление правил - тот еще гемор, если пытаемся задать универсальные правила. Такие ситуации как у ТС возникают постоянно. То одно правило перебивает, то второе. А сочетание модулей и обычных контроллеров умножает гемор на два )
Аватара пользователя
Besedin
Сообщения: 88
Зарегистрирован: 2012.07.30, 11:09
Откуда: Kyiv

Re: Modules: URL Rules

Сообщение Besedin »

zelenin писал(а):кстати, я писал бы вот так: <module:[\wd-]+> - в названии модуля вполне может быть черточка или цифра (PostAdminV2Module => post-admin-v2)
Кстати да. Я об этом не подумал. А как сработает правило если просто указать <module> ?
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Modules: URL Rules

Сообщение zelenin »

Besedin писал(а):
zelenin писал(а):кстати, я писал бы вот так: <module:[\wd-]+> - в названии модуля вполне может быть черточка или цифра (PostAdminV2Module => post-admin-v2)
Кстати да. Я об этом не подумал. А как сработает правило если просто указать <module> ?
заматчит любой текст, в том числе состоящий из одних цифр (id). В первой позиции вряд ли будет id, но тем не менее.
Ответить