Laravel .env文件中

时间:2015-11-16 17:48:58

标签: php mysql laravel ssl laravel-5.1

我正在运行Laravel 5.1并且有多个环境,一些需要SSL,一些不需要。当我需要SSL时,我在database.php中的配置在mysql驱动程序中需要以下内容:

'options'   => [
    PDO::MYSQL_ATTR_SSL_KEY     => env('MYSQL_SSL_KEY'), // /path/to/key.pem
    PDO::MYSQL_ATTR_SSL_CERT    => env('MYSQL_SSL_CERT'), // /path/to/cert.pem
    PDO::MYSQL_ATTR_SSL_CA      => env('MYSQL_SSL_CA'), // /path/to/ca.pem
    PDO::MYSQL_ATTR_SSL_CIPHER  => env('MYSQL_SSL_CIPHER')
]

问题是,当我在不使用SSL(例如本地)的环境中将这些env()变量设置为null时,它会中断(白屏等)。我要么不要设置"选项"键或设置为空数组以使其工作,这将删除env()变量,然后这些变量不会在SSL环境中起作用。

有没有办法满足这个适用于SSL和非SSL环境的密钥?

1 个答案:

答案 0 :(得分:8)

您可以定义一个启用或禁用SSL使用的新环境变量,然后使用三元运算符加载相应的配置。

在需要启用数据库SSL的环境中将其添加到.env文件中:

MYSQL_SSL=true // not having this variable defined or being false, will disable SSL

config/database.php文件中,修改要加载的连接的options键值,如下所示:

'options' => (env('MYSQL_SSL')) ? [
    PDO::MYSQL_ATTR_SSL_KEY    => env('MYSQL_SSL_KEY'),  // /path/to/key.pem
    PDO::MYSQL_ATTR_SSL_CERT   => env('MYSQL_SSL_CERT'), // /path/to/cert.pem
    PDO::MYSQL_ATTR_SSL_CA     => env('MYSQL_SSL_CA'),   // /path/to/ca.pem
    PDO::MYSQL_ATTR_SSL_CIPHER => env('MYSQL_SSL_CIPHER')
] : []

我通常反对在配置文件中使用逻辑,但这可能会导致异常。