使用$_ENV配置Laravel 4数据库


Laravel 4 Database configuration with $_ENV

我想使用Laravel环境作为我的数据库凭据,我这样做了:

inside bootstrap'start.php:

$env = $app-> detectenenvironment (array(

))

"当地"=比;阵列(My_PC),

‘生产’=比;数组("server.example.com")

));

serve.php所在的目录下创建了.env.local.php,在下面的代码中:

返回数组(

'DATABASE_NAME' => 'laravel_db',
'DATABASE_USER' => 'root',
'DATABASE_PASSWORD' => '1234' 

);

app'config内部创建了包含以下代码的local'app.php文件:

返回数组(

"调试"=比;真的,

);

app'config'database.php内为我的安全mysql连接我做了:

'mysql' => array(
            'driver'    => 'mysql',
            'host'      => 'localhost',
            'database'  => $_ENV['DATABASE_NAME'],
            'username'  => $_ENV['DATABASE_USER'],
            'password'  => $_ENV['DATABASE_PASSWORD'],
            'charset'   => 'utf8',
            'collation' => 'utf8_unicode_ci',
            'prefix'    => '',
        ),

但是我在CLI上得到一个错误:

{"error":{"type":"ErrorException","message":"Undefined index: DATABASE_NAME","file":"c:''xampp''htdocs''Larave_project''app''config''database.php","line":58}}

如何解决这个问题?

基于主机名的环境检测解决方案仅适用于Unix类型的系统。

在Laravel 4.2中,你可以这样检测环境:

$env = $app->detectEnvironment(function() {
    if ($_SERVER['SERVER_NAME'] == "127.0.0.1") {
            $domain = $_SERVER['HTTP_HOST'];
            if (strpos($domain, 'localhost') !== FALSE || strpos($domain, "127.0.0.1") !== FALSE) {
                die("Configure your local `hosts` file and go to address: http://{storeName}.local");
            }
        $len = strpos($domain, ".local");
        if ($len !== FALSE) {
            // will load .env.*.php
            $len = strpos($domain, ".local");
            $env = substr($domain, 0, $len);
            return $env;
        }
    }
    // will load .env.php
    return 'production';
});

(这是bootstrap/start.php)

:

  1. 设置hosts文件(在你的操作系统中)重定向mysuperstore.local到127.0.0.1
  2. 转到http://mysuperstore.local这样的URL,将.env.mysuperstore.php加载到$_ENV

在配置文件中(放在app/config/中的)参考$_ENV。要了解$_ENV的来源,请查看文档主题"保护敏感配置"。