在Laravel中动态编辑config / database.php文件

时间:2015-02-09 08:44:58

标签: laravel laravel-4

用户首次运行我的应用程序时,我想设置用户在我的应用程序中输入的数据库详细信息。

请告诉我如何在Laravel中编辑config / database.php文件并更新用户提供的数据库凭据。

'connections' => array(

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

3 个答案:

答案 0 :(得分:10)

最简单的解决方案可能是在初始配置文件中使用占位符:

'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);

这样您就不必实际解析文件了。

您可能还想使用某种默认database.php.dist并在填写值时创建实际的database.php。这样,您始终可以使用原始.dist文件重复设置过程。

答案 1 :(得分: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>');

在这种情况下,您的数据库配置看起来像这样,或者只提供默认连接信息并通过上述命令覆盖它。

'connections' => array(
    'local' => array(
        'driver'    => 'mysql',
        'host'      => '',
        'database'  => '',
        'username'  => '',
        'password'  => '',
        'charset'   => 'utf8',
        'collation' => 'utf8_unicode_cli',
        'prefix'    => '',
     ),
),

答案 2 :(得分: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'));
}