我在Laravel 4.2中进行了以下设置:
bootstrap / start.php (主机名正确,环境本地)
$env = $app->detectEnvironment(array(
'production' => array('produrl'),
'local' => array('MBP-Ivo.local', 'iMac-Ivo.local'),
));
.env.local.php (在项目根目录中,.env.php与mysql信息完全相同)
<?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']
);
还有一些变量,但问题出在 shipmentCountries 。
未定义的索引:shipmentCountries
声明的所有变量都有效(例如paymentIdeal),但shipmentCountries给出错误。我想因为它是一个阵列?这个名字在各处都是一样的,包括大写字母。
有谁知道为什么我不能让这个工作?
BTW:我正在选择此选项以防止用户更改其应用程序配置。我想只使用一个* .env文件来配置所有重要的东西。是的,我知道这些值可以保存到数据库中,但这是为了以后:)
/编辑: 当我转储$ _ENV时,我得到以下内容:
Array
(
[mysqlUsername] => ***
[mysqlPassword] => ***
[mysqlDatabase] => ***
[paymentIdeal] =>
[shipmentCountries.Nederland] => Nederland
[shipmentCountries.Belgie] => Belgie
);
不知何故,它“扁平化”了数组货运国家。任何人都知道如何以及为什么?
答案 0 :(得分:1)
你没错,使用点符号(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'
]
答案 1 :(得分:0)
随着lukasgeiter的提示,我再次搜索,发现了这个:
https://github.com/laravel/framework/issues/5291和https://github.com/laravel/framework/pull/4623
看起来Laravel不支持此选项。
我现在所做的是将其保存为JSON字符串,并在需要时对其进行解码。
答案 2 :(得分:0)
另一种方法是在env.local.php中对你的关联数组进行json_encode,然后在你的配置中
json_decode($_ENV['shipmentCountries'],true);
不要忘记那里的布尔参数,使其转换为数组。