【问题标题】:Laravel 4 Database configuration with $_ENV带有 $_ENV 的 Laravel 4 数据库配置
【发布时间】:2014-07-15 23:29:33
【问题描述】:

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

在bootstrap\start.php 内:

$env = $app->detectEnvironment(array(

'local' => 数组('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}}

如何解决这个问题?

【问题讨论】:

标签: php mysql arrays laravel-4


【解决方案1】:

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

【讨论】:

  • 在windows上可以使用机器名。
  • 在 windows 打开终端中获取主机名 > 写入主机名。所以你可以得到你的主机名。
【解决方案2】:

在 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 的来源,请查看documentation topic about "Protecting Sensitive Configuration"。

【讨论】:

    猜你喜欢
    • 2013-02-24
    • 2017-05-04
    • 1970-01-01
    • 2017-12-05
    • 2016-07-27
    • 2020-09-05
    • 1970-01-01
    • 1970-01-01
    • 2012-07-23
    相关资源
    最近更新 更多