我在Laravel 4.2中有以下设置:
引导/启动.php(主机名正确,环境是本地的)
$env = $app->detectEnvironment(array(
'production' => array('produrl'),
'local' => array('MBP-Ivo.local', 'iMac-Ivo.local'),
));
.env.local.php(在项目根目录中,.env.php 与 mysql info 完全相同)
<?php
return [
// Code variables
'mysqlUsername' => 'user',
'mysqlPassword' => 'password',
'mysqlDatabase' => 'database',
'paymentIdeal' => false,
'shipmentCountries' => [
'Nederland' => 'Nederland',
'Belgie' => 'Belgie'
]
];
config/app.php (我不会用app/config/local/app.php覆盖)
<?php
return array(
'paymentIdeal' => $_ENV['paymentIdeal'],
'shipmentCountries' => $_ENV['shipmentCountries']
);
还有一些变数,但问题出在出货量上。
未定义索引:发货国家
声明的所有变量都有效(例如付款理想),但发货国家/地区给出错误。我想是因为它是一个数组?名称在任何地方都完全相同,包括大写字母。
有谁知道为什么我不能让它工作?
顺便说一句:我选择此选项是为了防止用户必须更改其应用程序配置。我只想使用一个 *.env 文件来配置所有重要的东西。是的,我知道这些值可以保存到数据库中,但那是以后:)
/编辑:当我抛售 _ENV 美元时,我得到以下内容:
Array
(
[mysqlUsername] => ***
[mysqlPassword] => ***
[mysqlDatabase] => ***
[paymentIdeal] =>
[shipmentCountries.Nederland] => Nederland
[shipmentCountries.Belgie] => Belgie
);
不知何故,它"扁平化"了阵列发货国家。有人知道如何以及为什么吗?
对的,文件使用点符号(带array_dot
)转换为平面数组
我相信这背后的原因是环境变量不应该是数组,因为它们通常在使用 CLI 时传入。
那么,你能做些什么呢?
将数组从点转换为非点
在您的app/start/global.php
使用以下代码将数组转换回其原始格式:
$array = array();
foreach ($_ENV as $key => $value) {
array_set($array, $key, $value);
}
$_ENV = $array;
使用另一个文件并自行加载
也在app/start/global.php
里面(这将是.my.env.local.php
)
$config = require base_path().'/.my.env.'.app()->env.'.php';
$_ENV = array_merge($_ENV, $config);
旁注
如果你真的不想使用配置文件,我会再考虑一下。可以拥有自己的配置文件,甚至可以将其放在项目的根目录中。
我还会将数组更改为数字数组:
'shipmentCountries' => [
'Nederland',
'Belgie'
]
用lukasgeiter的尖端,我再次搜索,发现:
https://github.com/laravel/framework/issues/5291 和 https://github.com/laravel/framework/pull/4623
看起来Laravel不支持此选项。
我现在要做的是将其保存为 JSON 字符串,并在必要时对其进行解码。
另一种方法是在 env.local.php 中json_encode关联数组,然后在配置中
json_decode($_ENV['shipmentCountries'],true);
不要忘记那里的布尔参数,以使其转换为数组。