Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 04.05.2017 13:36:53

Динамическое имя Базы Данных.

Доброго времени суток. Поступила задача следующего характера. Есть сайт на который с разных ИП (ИП статические), нуэно подключаться на один сайт, разница лишь в том что от ИП будет меняться база, я это сделал след. образом в файле config/database.php просто вставил массив и сверяю ип адресс и выдаю логин пароль и все данные по подключению и все хорошо, но поступила далее задача, что бы владелец проекта мог зайти с дома на любую базу, тоесть сайт, имитация того что он на нужной базе, я придумал след. сделал через middleweare редирект на страничку где он должен ввести пароль, а этот пароль определит к какой базе он хочет подключиться, но у меня проблема что в файле database.php я не могу обратиться к сессиями или еще чему-то, и немного запутался как мне это сделать.... Буду рад за любой совет.

Не в сети

#2 04.05.2017 14:37:39

Re: Динамическое имя Базы Данных.

сделал след. образом, в миддлвеаре

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'

);

Не в сети

#3 04.05.2017 15:25:06

Re: Динамическое имя Базы Данных.

Тебе не нужно делать это в файле database.php.

Текущий значения конфига, которые первоначально были установлены из database.php можно менять по ходу выполнения кода. Например из той же мидлвари.

PHP
config(['app.timezone' => 'America/Chicago']);

https://laravel.com/docs/5.4/configuration#accessing-configuration-values

Изменено DBR (04.05.2017 15:28:19)

Не в сети

#4 04.05.2017 15:35:30

Re: Динамическое имя Базы Данных.

собственно в конфиге можно задать сколько угодно соединений с БД и в миддлвари менять только значение 'database.default' – выбирая нужное в данный момент соединение. таким образом конфиг можно будет кэшировать в продакшене (php artisan config:cache), чего нельзя делать если в конфиге присутствует какая-то логика на пхп.

если быть точнее, то если в конфиге идёт обращение к $_SERVER, то он вообще не будет кэшироваться. при запуске команднострочного пхп (php artisan …) $_SERVER вообще undefined. собственно что-то мне подсказывает что если в конфигах есть такая логика, то артизан вообще перестанет работать чуть менее чем полностью

Не в сети

Подвал раздела