Страница 1 из 1

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

Добавлено: 2018.11.29, 17:54
webgrig
Всем хорошего настроения!

У меня сайт - блог.
Я использую шаблон 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
Как разрулить эту ситуацию?

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

Добавлено: 2018.11.29, 18:31
andku83
поставьте правило:

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

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

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

Добавлено: 2018.11.29, 18:40
webgrig
andku83 писал(а): 2018.11.29, 18:31 поставьте правило:

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

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

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

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

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

Добавлено: 2018.11.29, 19:08
andku83
поменяйте на:

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

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

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

Добавлено: 2018.11.29, 19:43
webgrig
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',
],

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

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

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

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