Yii2, настройка конфига с запросом в БД

175
26 февраля 2019, 10:30

Структуру знаю еще плохо, но возник такой вопрос, возможно ли это вообще? Вопрос имеет отношение к роутингу, создал в админ-панели раздел заведения новых страниц (СЕО описания к разделам соответствующие имени контроллера) и дабы не прописывать в будущем каждый раз эти настройки, этим модулем хотел генерировать в конфиге маршрутизацию перебором в foreach.

На данный момент конфиг выглядит так:

'urlManager' => [
        'enablePrettyUrl' => true,
        'rules' => [
            '<controller:[\w-]+>/view/<slug:[\w-]+>' => '<controller>/view',
            '<controller:[\w-]+>/<action:[\w-]+>/<id:\d+>' => '<controller>/<action>',
            '<controller:[\w-]+>/cat/<slug:[\w-]+>' => '<controller>/cat',
            'admin' => 'admin/system/default',
            ['pattern' => 'admin','route' => 'admin/system/default','suffix' => '/',],
            'admin/settings' => 'admin/system/settings',
            'admin/settings/<action:[\w-]+>' => 'admin/system/settings/<action>',
            'admin/settings/<action:[\w-]+>/<id:\d+>' => 'admin/system/settings/<action>',
            ['pattern' => 'admin/settings','route' => 'admin/system/settings/','suffix' => '/',],
            ['pattern' => 'admin/settings/<action:[\w-]+>','route' => 'admin/system/settings/<action>','suffix' => '/',],
            ['pattern' => 'admin/settings/<action:[\w-]+>/<id:\d+>','route' => 'admin/system/settings/<action>','suffix' => '/',],
            'admin/modules' => 'admin/system/modules',
            'admin/modules/<action:[\w-]+>' => 'admin/system/modules/<action>',
            'admin/modules/<action:[\w-]+>/<id:\d+>' => 'admin/system/modules/<action>',
            ['pattern' => 'admin/modules','route' => 'admin/system/modules/','suffix' => '/',],
            ['pattern' => 'admin/modules/<action:[\w-]+>','route' => 'admin/system/modules/<action>','suffix' => '/',],
            ['pattern' => 'admin/modules/<action:[\w-]+>/<id:\d+>','route' => 'admin/system/modules/<action>','suffix' => '/',],
            'admin/system' => 'admin/system/system',
            'admin/system/<action:[\w-]+>' => 'admin/system/system/<action>',
            'admin/system/<action:[\w-]+>/<id:\d+>' => 'admin/system/system/<action>',
            ['pattern' => 'admin/system','route' => 'admin/system/system/','suffix' => '/',],
            ['pattern' => 'admin/system/<action:[\w-]+>','route' => 'admin/system/system/<action>','suffix' => '/',],
            ['pattern' => 'admin/system/<action:[\w-]+>/<id:\d+>','route' => 'admin/system/system/<action>','suffix' => '/',],
            'admin/logs' => 'admin/system/logs',
            'admin/logs/<action:[\w-]+>' => 'admin/system/logs/<action>',
            'admin/logs/<action:[\w-]+>/<id:\d+>' => 'admin/system/logs/<action>',
            ['pattern' => 'admin/logs','route' => 'admin/system/logs/','suffix' => '/',],
            ['pattern' => 'admin/logs/<action:[\w-]+>','route' => 'admin/system/logs/<action>','suffix' => '/',],
            ['pattern' => 'admin/logs/<action:[\w-]+>/<id:\d+>','route' => 'admin/system/logs/<action>','suffix' => '/',],
            'admin/tags' => 'admin/system/tags',
            'admin/tags/<action:[\w-]+>' => 'admin/system/tags/<action>',
            'admin/tags/<action:[\w-]+>/<id:\d+>' => 'admin/system/tags/<action>',
            ['pattern' => 'admin/tags','route' => 'admin/system/tags/','suffix' => '/',],
            ['pattern' => 'admin/tags/<action:[\w-]+>','route' => 'admin/system/tags/<action>','suffix' => '/',],
            ['pattern' => 'admin/tags/<action:[\w-]+>/<id:\d+>','route' => 'admin/system/tags/<action>','suffix' => '/',],
            'admin/user' => 'admin/system/user',
            'admin/user/<action:[\w-]+>' => 'admin/system/user/<action>',
            'admin/user/<action:[\w-]+>/<id:\d+>' => 'admin/system/user/<action>',
            ['pattern' => 'admin/user','route' => 'admin/system/user/','suffix' => '/',],
            ['pattern' => 'admin/user/<action:[\w-]+>','route' => 'admin/system/user/<action>','suffix' => '/',],
            ['pattern' => 'admin/user/<action:[\w-]+>/<id:\d+>','route' => 'admin/system/user/<action>','suffix' => '/',],
            'admin/role' => 'admin/system/role',
            'admin/role/<action:[\w-]+>' => 'admin/system/role/<action>',
            'admin/role/<action:[\w-]+>/<id:\d+>' => 'admin/system/role/<action>',
            ['pattern' => 'admin/role','route' => 'admin/system/role/','suffix' => '/',],
            ['pattern' => 'admin/role/<action:[\w-]+>','route' => 'admin/system/role/<action>','suffix' => '/',],
            ['pattern' => 'admin/role/<action:[\w-]+>/<id:\d+>','route' => 'admin/system/role/<action>','suffix' => '/',],
            'admin/permission' => 'admin/system/permission',
            'admin/permission/<action:[\w-]+>' => 'admin/system/permission/<action>',
            'admin/permission/<action:[\w-]+>/<id:\d+>' => 'admin/system/permission/<action>',
            ['pattern' => 'admin/permission','route' => 'admin/system/permission/','suffix' => '/',],
            ['pattern' => 'admin/permission/<action:[\w-]+>','route' => 'admin/system/permission/<action>','suffix' => '/',],
            ['pattern' => 'admin/permission/<action:[\w-]+>/<id:\d+>','route' => 'admin/system/permission/<action>','suffix' => '/',],
            'admin/rule' => 'admin/system/rule',
            'admin/rule/<action:[\w-]+>' => 'admin/system/rule/<action>',
            'admin/rule/<action:[\w-]+>/<id:\d+>' => 'admin/system/rule/<action>',
            ['pattern' => 'admin/rule','route' => 'admin/system/rule/','suffix' => '/',],
            ['pattern' => 'admin/rule/<action:[\w-]+>','route' => 'admin/system/rule/<action>','suffix' => '/',],
            ['pattern' => 'admin/rule/<action:[\w-]+>/<id:\d+>','route' => 'admin/system/rule/<action>','suffix' => '/',],
        ],
    ],

Как отправить запрос в бд из конфига, чтобы собрать нужный мне массив?

Answer 1

Такой подход не совсем правильный. Конфиг есть конфиг и оттуда не стоит лезть в БД. Я бы посмотрел в сторону предзагрузки. В общем это выглядит так:

  1. Создаем модуль
  2. Добавляем его в секцию bootstrap в конфиге
  3. В модуле делаем запрос к БД, формируем необходимый массив
  4. Добавляем правила в урлменеджер динамически

В итоге получаем аккуратный конфиг и отдельно обработку и добавление правил к урлам. Тут чуть подробнее по добавлению правил динамически.

Тут немного о предзагрузке.

READ ALSO
Адаптировать изображение CSS

Адаптировать изображение CSS

Подскажите, пожалуйста, есть див в котором находится изображение и див с текстом, как сделать, чтобы высота изображения автоматически подстраивалась...

173
Как раскрыть панель навигации?

Как раскрыть панель навигации?

При уменьшении окна браузера панель навигации сворачивается, но раскрыть её обратно не получается, хотелось бы чтобы при нажатии на кнопку...

189
Прозрачность в css [закрыт]

Прозрачность в css [закрыт]

При создании прямоугольника с сделал обводку, хотел изменить прозрачность середины, но чтобы обводка не была прозрачной

155
Отмена цвета фона при наведении

Отмена цвета фона при наведении

Например, если наводим на 2ой или 3й блок, то у первого блока цвет становится как у остальных - серыйЕсли курсор за пределами всех блоков, то у первого...

198