2015-02-09 3 views
4

В первый раз, когда пользователь запускает мое приложение, я хочу установить данные базы данных, введенные пользователем в моем приложении.Динамически редактировать файл config/database.php в Laravel

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

'connections' => array(

    'mysql' => array(
     'driver' => 'mysql', 
     'host'  => '*********', 
     'database' => '********', 
     'username' => '********', 
     'password' => '*******', 
     'charset' => 'utf8', 
     'collation' => 'utf8_unicode_ci', 
     'prefix' => '', 
    ), 
), 
+0

Планируете ли вы сделать это для каждого пользователя? У каждого пользователя есть своя собственная копия приложения - или это все на одном сервере? – Laurence

ответ

8

Самое простое решение, вероятно, использовать заполнители в исходном файле конфигурации:

'mysql' => array(
    'driver' => 'mysql', 
    'host'  => '%host%', 
    'database' => '%database%', 
    'username' => '%username%', 
    'password' => '%password%', 
    'charset' => 'utf8', 
    'collation' => 'utf8_unicode_ci', 
    'prefix' => '', 
), 

А потом просто заменить их с реальными значениями:

$path = app_path('config/database.php'); 
$contents = File::get($path); 

$contents .= str_replace('%host%', $host, $contents); 
// and so on 

File::put($path, $contents); 

Таким образом, вы не» t должен фактически разбирать файл.

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

+0

спасибо, что он работает –

+0

У меня также есть то же самое делать. Я создал database.php.dist вместе с database.php в app/config, но он не работает. Пожалуйста, помогите мне сделать это. –

0

Нет встроенной функциональности, чтобы делать то, что вы хотите здесь. Тем не менее, я сделал то же самое сам, и я просто загружаю файл, выполняю операцию замены строки, а затем записываю его обратно. Это, кстати, способ, которым принадлежит laravel 'set application key' command works, поэтому, по крайней мере, нам не хватает какой-либо недокументированной функциональности!

Нечто подобное, в fire методе вашей работы команды:

$dialog = $this->getHelperSet()->get('dialog'); 

$host = $dialog->ask($this->output, '<question>Hostname?</question> '); 
$db = $dialog->ask($this->output, '<question>Database?</question> '); 
$user = $dialog->ask($this->output, '<question>Username?</question> '); 
$pass = $dialog->ask($this->output, '<question>Password?</question> '); 

if ($file = file_get_contents(app_path('config/database.php')) { 
    $file = str_replace("'host'  => '*********'", "'host'  => '".$host."'", $file); 
    $file = str_replace("'database' => '********'", "'database' => '".$db."'", $file); 
    $file = str_replace("'username' => '********'", "'username' => '".$user."'", $file); 
    $file = str_replace("'password' => '*******'", "'password' => '".$pass."'", $file); 

    file_put_contents(app_path('config.database.php')); 
} 
1

Если вы хотите установить соединение с базой данных динамически для всего один запроса вы также можете использовать следующий вариант.

Config::set('database.connections.local.host', '<New Host IP>'); 
Config::set('database.connections.local.database', '<New DB>'); 
Config::set('database.connections.local.username', '<New Username>'); 
Config::set('database.connections.local.password', '<New Password>'); 

Вашего DB конфигурация может, выглядит в этом случае, или просто предоставить информацию о подключении по умолчанию и переопределить его с помощью указанных выше команд.

'connections' => array(
    'local' => array(
     'driver' => 'mysql', 
     'host'  => '', 
     'database' => '', 
     'username' => '', 
     'password' => '', 
     'charset' => 'utf8', 
     'collation' => 'utf8_unicode_cli', 
     'prefix' => '', 
    ), 
), 
Смежные вопросы