Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Доброго времени суток. Поступила задача следующего характера. Есть сайт на который с разных ИП (ИП статические), нуэно подключаться на один сайт, разница лишь в том что от ИП будет меняться база, я это сделал след. образом в файле config/database.php просто вставил массив и сверяю ип адресс и выдаю логин пароль и все данные по подключению и все хорошо, но поступила далее задача, что бы владелец проекта мог зайти с дома на любую базу, тоесть сайт, имитация того что он на нужной базе, я придумал след. сделал через middleweare редирект на страничку где он должен ввести пароль, а этот пароль определит к какой базе он хочет подключиться, но у меня проблема что в файле database.php я не могу обратиться к сессиями или еще чему-то, и немного запутался как мне это сделать.... Буду рад за любой совет.
Не в сети
сделал след. образом, в миддлвеаре
if (in_array($_SERVER['HTTP_X_REAL_IP'],$arrayIps) or $request->session()->has('ip')) {
Config::set('database.connections.custom.host', 'localhost');
Config::set('database.connections.custom.username', $studios[$request->session()->get('ip')]['username']);
Config::set('database.connections.custom.password', $studios[$request->session()->get('ip')]['password']);
Config::set('database.connections.custom.database', $studios[$request->session()->get('ip')]['database']);
Config::set('database.default', 'custom');
\DB::purge('custom');
\DB::reconnect('custom');
return $next($request);
}
return redirect('not-ip'
);
Не в сети
Тебе не нужно делать это в файле database.php.
Текущий значения конфига, которые первоначально были установлены из database.php можно менять по ходу выполнения кода. Например из той же мидлвари.
config(['app.timezone' => 'America/Chicago']);
https://laravel.com/docs/5.4/configuration#accessing-configuration-values
Изменено DBR (04.05.2017 15:28:19)
Не в сети
собственно в конфиге можно задать сколько угодно соединений с БД и в миддлвари менять только значение 'database.default' – выбирая нужное в данный момент соединение. таким образом конфиг можно будет кэшировать в продакшене (php artisan config:cache), чего нельзя делать если в конфиге присутствует какая-то логика на пхп.
если быть точнее, то если в конфиге идёт обращение к $_SERVER, то он вообще не будет кэшироваться. при запуске команднострочного пхп (php artisan …) $_SERVER вообще undefined. собственно что-то мне подсказывает что если в конфигах есть такая логика, то артизан вообще перестанет работать чуть менее чем полностью
Не в сети
Страницы 1