![](/img/trans.png)
[英]Laravel Application Environment variable in config/app.php and .env file
[英]Environment specific SSL config in Laravel .env file
我正在运行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()vars设置为null时,它会崩溃(白屏等)。 我不必设置“ options”键或将其设置为一个空数组以使其起作用,这将删除env()vars,而后者在SSL环境中将无法使用。
有没有一种方法可以满足可以同时在SSL和非SSL环境中使用的密钥?
您可以定义一个新的环境变量来启用或禁用SSL使用,然后使用三元运算符加载适当的配置。
在需要启用数据库SSL的环境中,将.env
添加到您的.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')
] : []
我通常反对在配置文件中使用逻辑,但是在这种情况下,可能会发生异常。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.