bepack
@bepack
Погружаюсь в мир JavaScript

Поменять конфиг приложения из компонента?

Добрый день, есть компонент "бутстрап" приложения, который смотрит бд и должен конфигурировать приложение.

Например если флан активности сайта - false, то установить в конфиг catchAll и тд

Этот компонент нужно добавить в конфиг bootstrap компонентов, и все, это позволит сделать свой "быстрый" пакет настроек, с быстрым и простым подключением, а не настраивать все отдельно и тп

Как поменять конфиг приложения из компонента ? (не лезть в bootstrap.php)
\Yii::configure() подойдет или он только модули конфигурирует?
  • Вопрос задан
  • 45 просмотров
Решения вопроса 1
slo_nik
@slo_nik Куратор тега Yii
Вариантов может быть несколько.
Через модуль.
например есть какой-то модуль. Пусть он установлен или через composer или вручную в приложение.
В конфигурационном файле надо прописать подключение этого модуля.
Например так
'modules' => [
        'support' => [
            'class' => ModuleTicket::class,
           // далее могут быть настройки самого модуля.
        ],
    ],

В самом модуле есть файл ModuleTicket.php и Bootstrap.php
Сам Bootstrap.php может выглядеть так
class Bootstrap implements BootstrapInterface
{
    /**
     * @inheritdoc
     */
    public function bootstrap($app)
    {
        if ($app->hasModule('support') && ($module = $app->getModule('support')) instanceof ModuleTicket) {

            $app->urlManager->addRules(
                [
                    '<_m:support>/new-ticket' => '<_m>/ticket/create',
                    '<_m:support>/<id:\w+>' => '<_m>/ticket/view',
                    '<_m:support>' => '<_m>/ticket/index',
                ]
            );

            if (!$app->has($this->getModule()->queueComponent)) {
                $app->set($this->getModule()->queueComponent, [
                    'class' => Queue::class,
                    'handle' => true, // whether tasks should be executed immediately
                ]);
            }
        }

        // Add module I18N category.
        if (!isset($app->i18n->translations['slo-nik/*'])) {
            $app->i18n->translations['slo-nik/*'] = [
                'class' => PhpMessageSource::class,

            ];
        }
    }
}

Тут настраиваются и очереди и urlManager и переводы модуля. Всё налету и по условиям может быть настроено.
Можно настроить через компонент
В конфигурационном файле приложения, в секции 'components' подключаете свой компонент.
'siteSettings' => [
        'class' => SiteSettings::class
      ],

Все данные для настройки сайта у Вас хранятся в базе данных. Например, настройки smtp у Вас в базе.
Как подключить свои настройки для mailer в yii?
Вот так
'mailer'       => function () {
        return Yii::createObject([
          'class'            => 'yii\swiftmailer\Mailer',
          'useFileTransport' => true,

          'transport'     => [
            'class'      => 'Swift_SmtpTransport',
            'host'       => Yii::$app->siteSettings->get('SITE.MAIL_HOST'),
            'port'       => Yii::$app->siteSettings->get('SITE.MAIL_PORT'),
            'username'   => Yii::$app->siteSettings->get('SITE.MAIL_USER'),
            'password'   => Yii::$app->siteSettings->get('SITE.MAIL_PASS'),
            'encryption' => Yii::$app->siteSettings->get('SITE.MAIL_ENCR')
          ],
          'messageConfig' => [
            'to'   => [ Yii::$app->siteSettings->get('SITE.EMAIL_ADMIN') ],
            'from' => [ Yii::$app->siteSettings->get('SITE.MAIL_USER') ]
          ]
        ]);

Все данные берутся из базы.
В общем тут можно по разному действовать.
Вот тут создаётся магазин на примере yii2. И в этом же мастер-классе рассказано, как работать с контейнером зависимостей.
Ну а компонент настроек сайта делайте по примеру этой статьи. Статья для первой версии yii, но переделать для второй версии не составит труда.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы