Динамическое добавление правил маршрутизации

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

Динамическое добавление правил маршрутизации

Сообщение dpts »

Доброго дня всем.
Объясните новичку-новичку пожалуйста где я не правильно читаю докуцментацию?
Имеется:
- php 7.4
- свежепоставленный yii advanced.

в файле frontend\config\main.php
пишу:

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

'urlManager' => [
            'enablePrettyUrl' => true,
            'showScriptName' => false,
            'rules' => [
                'home' => '',
                'about' => 'site/about',
                'contact' => 'site/contact',
                'signup' => 'site/signup',
                'login' => 'site/login',
                'logout' => 'site/logout',
                'gii' => 'gii',
                'defaultRoute' => '']
        ]
Соответственно поправляю ссылки в файле frontend\views\layouts\main.php

Все работает!
в браузере ссылки выглядят как /contact, /signup, /about, /login
Все работает, ссылки ведут куда положено!

Читаю документацию по маршрутизации и динамичесвому добавлению правил, пытаюсь прикрутить.

В файле frontend\config\main.php
Ключ rules оставляю пустым массивом.

В файле frontend\config\bootstrap.php прописываю:

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

use yii\base\BootstrapInterface;

class Bootstrap implements BootstrapInterface
{
    function bootstrap($app)
    {
        $app->getUrlManager()->addRules(
            [
                'home' => '',
                'about' => 'site/about',
                'contact' => 'site/contact',
                'signup' => 'site/signup',
                'login' => 'site/login',
                'logout' => 'site/logout',
                'gii' => 'gii',
                'defaultRoute' => ''
            ]
        );
    }
}
получаю: Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; Bootstrap has a deprecated constructor in ...
Вроде понятно, делаю function __construct($app) вместо function bootstrap($app)
получаю: Fatal error: Class Bootstrap contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (yii\base\BootstrapInterface::bootstrap) in...
Вроде тож понятно, делаю abstract class Bootstrap... вместо class Bootstrap...

Ошибок не получаю, - уже хорошо.
Смотрю ссылки:
-about и contact (визуально) ведут на /site/about и site/contact и работают
-gii (визуально) ведет на /gii и работает
-signup и login (визуально) ведут на /signup и /login и уходят на 404.

Покажите пальцем, пожалуйста, где я чего не дочитал?
Аватара пользователя
SiZE
Сообщения: 2813
Зарегистрирован: 2011.09.21, 12:39
Откуда: Perm
Контактная информация:

Re: Динамическое добавление правил маршрутизации

Сообщение SiZE »

Раньше в РНР не было метода __construct. Его заменял метод с тем же именем, что и у класса

было

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

class Bootstrap implements BootstrapInterface
{
    function bootstrap()
    {
    }
}
стало

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

class Bootstrap implements BootstrapInterface
{
    function __construct()
    {
    }
}
Собственно надо переименовать класс.

И у вас неверный подход.

https://www.yiiframework.com/doc/guide/ ... #bootstrap посмотрите документацию, в секции 'bootsrap' указываются компоненты которые должны быть проинициализированы сразу
If the component class implements yii\base\BootstrapInterface, its bootstrap() method will also be called.
соответственно если класс унаследованный от yii\base\Component реализует бутстрап интерфейс, дополнительно будет вызван метод bootstrap()

P.S. Ну и в принципе непонятно зачем таким образом прокидывать url
dpts
Сообщения: 2
Зарегистрирован: 2023.01.09, 09:50

Re: Динамическое добавление правил маршрутизации

Сообщение dpts »

Спасибо за пояснения.
P.S. Ну и в принципе непонятно зачем таким образом прокидывать url
Что Вы имеете в виду под "таким образом"?
Аватара пользователя
SiZE
Сообщения: 2813
Зарегистрирован: 2011.09.21, 12:39
Откуда: Perm
Контактная информация:

Re: Динамическое добавление правил маршрутизации

Сообщение SiZE »

dpts писал(а): 2023.01.19, 10:10 Спасибо за пояснения.
P.S. Ну и в принципе непонятно зачем таким образом прокидывать url
Что Вы имеете в виду под "таким образом"?
Статичные URL можно оставить в основном конфиге. Если нужны динамические, то скорее всего вы ищете то что в этом ответе https://stackoverflow.com/a/36057877/3041129
Ответить