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

    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, но переделать для второй версии не составит труда.
    Ответ написан
    Комментировать