Задать вопрос
@maxso
Fullstack web developer

Как в yii2 вывести данные из БД в конфиг?

Здравствуйте
Подскажите пожалуйста как вывести данные из БД в config приложения ?
Мне нужно для смс модуля (smsc) - чтобы передавать пароль с логином.
Не удобно постоянно в конфиг лезть, задача чтобы менялся на лету.
Увы так не понял как это сделать :(
Буду благодарен за помощь

Сам конфиг:

<?php

$params = require __DIR__ . '/params.php';
$db = require __DIR__ . '/db.php';
Yii::setAlias('@images', dirname(__DIR__) . '/web/uploads');

$config = [
    'id' => 'basic',
    'basePath' => dirname(__DIR__),
    'bootstrap' => ['log' , 'config'],
    'name' => 'CRM',
    'language' => 'ru-RU',
    'sourceLanguage' =>'ru-RU',

    'aliases' => [
        '@bower' => '@vendor/bower-asset',
        '@npm'   => '@vendor/npm-asset',
    ],
    'components' => [
        'assetManager' => [
            'linkAssets' => true,
            'appendTimestamp' => true,
        ],
        'SMSCenter' => [
            'class' => 'integready\smsc\SMSCenter',
            'login' => '',
            'password' => '',
            'useSSL' => false,
            'options' => [
                'sender' => '',   // имя отправителя
//                'hlr' => 1,
//                'translit', // кодировать ли сообщения в транслит (self::TRANSLIT_NONE)
//                'charset',  // кодировка запроса и ответа (self::CHARSET_UTF8)
//                'fmt',      // формат ответа сервера (self::FMT_JSON)
//                'type',     // тип сообщения (self::MSG_SMS), замена push, ping, hlr и прочих
//                'cost',     // запрашивать ли стоимость (self::COST_NO)
//                'time',     // время отправки сообщения (null)
//                'tz',       // часовой пояс параметра time (null)
            ],
        ],
        'config' => [ // сам компонент прописываем
            'class' => 'app\components\Config',
        ],
        'view' => [
            'theme' => [
                'pathMap' => [
                    '@app/views' => '@app/views/client/yii2-app'//'@vendor/dmstr/yii2-adminlte-asset/example-views/testing/app' //
                ],
            ],
        ],
        'request' => [
            // !!! insert a secret key in the following (if it is empty) - this is required by cookie validation
            'cookieValidationKey' => 'nfnnfnbhfibhdFdccwed^87e8xscscdcfeegtb',
            'baseUrl'=> '',
        ],
        'cache' => [
            'class' => 'yii\caching\FileCache',
        ],
        'user' => [

            //'class' => 'dektrium\user\Module',
            'identityClass' => 'app\models\User',
            'enableAutoLogin' => true,
        ],
        'authManager' => [
            'class' => 'yii\rbac\DbManager',
            'cache' => 'cache' //Включаем кеширование
        ],
        'errorHandler' => [
            'errorAction' => 'site/error',
        ],
        'formatter' => [
               'class' => 'yii\i18n\Formatter',
               'defaultTimeZone' => 'Europe/Moscow',


        ],
        'mailer' => [
            'class' => 'yii\swiftmailer\Mailer',
            // send all mails to a file by default. You have to set
            // 'useFileTransport' to false and configure a transport
            // for the mailer to send real emails.
        'useFileTransport' => false,
            'transport' => [
                'class' => 'Swift_SmtpTransport',
                'host' => 'smtp.yandex.ru',
                'username' => 'rent909@yandex.ru',
                'password' => '',
                'port' => '465',
                'encryption' => 'ssl',
            ],
 

        ],
        'log' => [
            'traceLevel' => YII_DEBUG ? 3 : 0,
            'targets' => [
                [
                    'class' => 'yii\log\FileTarget',
                    'levels' => ['error', 'warning'],
                ],
            ],
        ],
        'db' => $db,
        'urlManager' => [
            'enablePrettyUrl' => true,
            'showScriptName' => false,
            'rules' => [
                ['pattern' => 'yandex-market', 'route' => 'YandexMarketYml/default/index', 'suffix' => '.yml'],
            ],
        ],



        /**
         * Компонент принимает и управляет логами
         */
        'activityLogger' => [
            'class' => \lav45\activityLogger\Manager::class,

            // Включаем логирование для PROD версии
            'enabled' => YII_ENV_DEV,

            // при вызове метода `clean()` будут удалены все данные добавленные 365 дней назад
            'deleteOldThanDays' => 365,

            // идентификатор компонента `\yii\web\User`
            'user' => 'user',

            // Поле для отображения имени из модели пользователя
            'userNameAttribute' => 'username',

            // идентификатор компонента хранилища логов `\lav45\activityLogger\StorageInterface`
            'storage' => 'activityLoggerStorage',

            'messageClass' => [
                'class' => \lav45\activityLogger\LogMessage::class,

                // При использовании компанета когда пользователь ещё не авторизировался его действия
                // можно записывать от имени "Неизвесный пользователь", к примеру.
                'userId' => 'cron',
                'userName' => 'Неизвесный пользователь',

                // Окружение из которого проиводило действие
                'env' => 'console',

                // Так же можно указать значение по умолчанию и для других параметров
                // 'entityId' => '...',
                // 'createdAt' => time(),
                // 'action' => '...',
                // 'data' => [" ... "],
            ],
        ],

        /**
         * Компонент принимает и управляет логами
         */
        'activityLoggerStorage' => [
            'class' => \lav45\activityLogger\DbStorage::class,

            // Имя таблицы в которой будут хранится логи
            'tableName' => '{{%activity_log}}',

            // идентификатор компонента `\yii\db\Connection`
            'db' => 'db',
        ]




        
    ],

    'modules' => [
        'dynagrid'=> ['class'=>'\kartik\dynagrid\Module'],
        'datecontrol' =>  [
            'class' => '\kartik\datecontrol\Module'
        ],
        'gridview' => ['class' => 'kartik\grid\Module'],
        'logger' => [
            'class' => \lav45\activityLogger\modules\Module::class,

            // Список моделей которые логировались
            'entityMap' => [
                'user' => 'app\models\User',
            ],
        ]
//





//
],
    'params' => $params,
];

if (YII_ENV_DEV) {
    // configuration adjustments for 'dev' environment
    $config['bootstrap'][] = 'debug';
    $config['modules']['debug'] = [
        'class' => 'yii\debug\Module',
        // uncomment the following to add your IP if you are not connecting from localhost.
       'allowedIPs' => ['127.0.0.1',  '79.126.56.121','::1'],
    ];

    $config['bootstrap'][] = 'gii';
    $config['modules']['gii'] = [
        'class' => 'yii\gii\Module',
        // uncomment the following to add your IP if you are not connecting from localhost.
       'allowedIPs' => ['127.0.0.1', '79.126.56.121', '::1'],
    ];
}

return $config;


Нужно брать данные из БД и подставлять значение в SMSCenter
  • Вопрос задан
  • 513 просмотров
Подписаться 1 Простой 2 комментария
Пригласить эксперта
Ответы на вопрос 1
slo_nik
@slo_nik Куратор тега Yii
'SMSCenter' => function(){
    return Yii::$app->createObject( [
            'class' => 'integready\smsc\SMSCenter',
            'login' => '',
            'password' => '',
            'useSSL' => false,
            'options' => [
            ],
        ]);
}

Теперь останется только добавить в настройки нужные значения.
Можно через статический метод попробовать, а можно сделать компонент "Настройки" и уже через него получать нужные значения.
Есть пример такого компонента, написанный для YII1, но переписать на вторую версию большого труда не составит.
Тогда добавить параметр из базы сведётся к следующему
'login' => Yii::$app->settings->get('password),
Сам компонент подключить в том же конфигурационном файле.
'components' => [
    'settings' => [
        // настройки компонента
    ]
]

p.s.
Так же можно перенести настройки для mailer в базу.
Ответ написан
Ваш ответ на вопрос

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

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