Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Приветствую! Имеется изменяемая на стороне информация с подключениями (разные сервера, пароли и прочее), пытаюсь изменить подключение в config
'connections' => [
'mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'strict' => false,
'engine' => null,
]
]
Меняю конфиг
public function config($dbname, $dbpass, $dbhost, $username){
$config = Config::get('database.connections.mysql');
$config['database'] = $dbname;
$config['password'] = $dbpass;
$config['host'] = $dbhost;
$config['username'] = $username;
Config::set('database.connections.mysql', $config);
}
Но запрос к DB::select("запрос"); после переподключения все равно обращается к старым параметрам, а нужно к новым.При этом возврат Config::get('database.connections.mysql') после переподключения дает нужные значения.
Не в сети
На сколько можно понять из кода, тут вовсе нет никакого переподключения соединения. Вы просто поменяли конфиг без повторной инициализации соединения к бд.
Не в сети
Отлично! Спасибо! Констатация факта очень помогла.
Конфиг так понимаю загружается один раз перед стартом, неужели такая стандартная задача не учтена при создании фреймворка? Нет возможности создать конфигурацию заранее для изменяющихся данных... Повторная инициализация это уже какой-то костыль получается.
Не в сети
Конфиг кешируется. А чем вас решение c .env не устроило? Прописываете несколько подключений и при запросах указываете имя подключения. И с точки безопасности в коде даже если это в рантайме хардкодить доступы любого характера очень скверная привычка.
Если вы используете тот же гит, в комите доступы лежат.
Не в сети
Страницы 1