Как правильно написать urlRules

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
webgrig
Сообщения: 163
Зарегистрирован: 2015.10.29, 21:34

Как правильно написать urlRules

Сообщение webgrig » 2018.11.29, 17:54

Всем хорошего настроения!

У меня сайт - блог.
Я использую шаблон basic с модулем "admin" и так-же уникальный "slug" для ЧПУ

Вот мои правила в UrlManager:

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

'urlManager' => [
    'class' => 'yii\web\UrlManager',
    'enablePrettyUrl' => true,
    'showScriptName' => false,
    'rules' =>[
        '/' => 'site/index',
        '<action>' => 'site/<action>',
        [
            'pattern' => '<slug:.+>',
            'route' => 'site/article',
            'mode' => \yii\web\UrlRule::CREATION_ONLY
        ],
        '<module:\w+>' => '<module>/default/index',
        '<module:\w+>/<controller:\w+>/<action:[0-9a-zA-Z_\-]+>/<id:\d+>' => '<module>/<controller>/<action>',
        '<module>/<controller>/<action>' => '<module>/<controller>/<action>',
        '<controller:\w+>/<id:\d+>' => '<controller>/index',
        '<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>',
        '<controller:\w+>/<action:\w+>' => '<controller>/<action>',
        '<slug:.+>' => 'site/article',
    ],
],
Но при этом когда я обращении к модулю "admin" по следующей ссылке

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

https://my_site.com/admin
Я получаю 404

Но стоит мне закоментировать в правилах строчку:

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

'<action>' => 'site/<action>',
как доступ в админку начинает работать, но при этом перестают работать ссылки типа:

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

https://my_site.com/about-us
Как разрулить эту ситуацию?

andku83
Сообщения: 988
Зарегистрирован: 2016.07.01, 10:24
Откуда: Харьков

Re: Как правильно написать urlRules

Сообщение andku83 » 2018.11.29, 18:31

поставьте правило:

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

        '<module:\w+>' => '<module>/default/index',
выше того которое комментируете

webgrig
Сообщения: 163
Зарегистрирован: 2015.10.29, 21:34

Re: Как правильно написать urlRules

Сообщение webgrig » 2018.11.29, 18:40

andku83 писал(а):
2018.11.29, 18:31
поставьте правило:

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

        '<module:\w+>' => '<module>/default/index',
выше того которое комментируете
В таком случае перестают работать ссылки типа

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

https://my_site.com/about-us
При клике по такой ссылке получаю 404

andku83
Сообщения: 988
Зарегистрирован: 2016.07.01, 10:24
Откуда: Харьков

Re: Как правильно написать urlRules

Сообщение andku83 » 2018.11.29, 19:08

поменяйте на:

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

 '<module:(admin|super-module|...)>' => '<module>/default/index', // (admin|super-module|...) - замените на то что вам нужно

webgrig
Сообщения: 163
Зарегистрирован: 2015.10.29, 21:34

Re: Как правильно написать urlRules

Сообщение webgrig » 2018.11.29, 19:43

andku83 писал(а):
2018.11.29, 19:08
поменяйте на:

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

 '<module:(admin|super-module|...)>' => '<module>/default/index', // (admin|super-module|...) - замените на то что вам нужно
Спасибо модуль admin начал работать и ссылки типа:

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

https://my_site.com/about-us
тоже работают, но вот ссылки типа:

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

https://my_site.com/slug
не работают

вот как выглядить мой rules сейчас, после изменений:

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

'rules' =>[
    '/' => 'site/index',
    [
        'pattern' => '<slug:.+>',
        'route' => 'site/article',
        'mode' => \yii\web\UrlRule::CREATION_ONLY
    ],
    '<module:(admin)>' => '<module>/default/index',
    '<module:(admin)>/<controller:\w+>/<action:[0-9a-zA-Z_\-]+>/<id:\d+>' => '<module>/<controller>/<action>',
    '<module>/<controller>/<action>' => '<module>/<controller>/<action>',
    '<controller:\w+>/<id:\d+>' => '<controller>/index',
    '<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>',
    '<controller:\w+>/<action:\w+>' => '<controller>/<action>',
    '<action>' => 'site/<action>',
    '<slug:.+>' => 'site/article',
],

urichalex
Сообщения: 965
Зарегистрирован: 2015.08.07, 11:03

Re: Как правильно написать urlRules

Сообщение urichalex » 2018.11.29, 21:01

<action> и <slug> выполняются абсолютно одинаково. Можно в <action> перечислить действия, которые есть в ControllerIndex

Аватара пользователя
Йож
Сообщения: 572
Зарегистрирован: 2015.08.26, 03:05

Re: Как правильно написать urlRules

Сообщение Йож » 2018.11.29, 21:33

По мне так не очень хорошая практика, смысл все пихать в кучу, пусть экшены в корне, а статьи в /article/<slug> и контроллер под это заодно отдельный, а не в SiteController.

Ответить