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

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

Добавлено: 2023.01.09, 10:40
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.

Покажите пальцем, пожалуйста, где я чего не дочитал?

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

Добавлено: 2023.01.13, 10:25
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

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

Добавлено: 2023.01.19, 10:10
dpts
Спасибо за пояснения.
P.S. Ну и в принципе непонятно зачем таким образом прокидывать url
Что Вы имеете в виду под "таким образом"?

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

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