用户首次运行我的应用程序时,我想设置用户在我的应用程序中输入的数据库详细信息。
请告诉我如何在Laravel中编辑config / database.php文件并更新用户提供的数据库凭据。
'connections' => array(
'mysql' => array(
'driver' => 'mysql',
'host' => '*********',
'database' => '********',
'username' => '********',
'password' => '*******',
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
),
),
答案 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'));
}