Gnu*_*fo1 5 php environment-variables laravel laravel-5
我刚刚开始使用使用dotenv库的Laravel 5.这在项目的根目录中使用.env文件,该文件使用以下行设置环境:
APP_ENV=local
Run Code Online (Sandbox Code Playgroud)
根据我在这个主题上阅读的所有内容,所有其他环境特定的配置都应该放在这个文件中,所以数据库密码,网址等,然后读入主配置数组,如下所示:
env('DB_HOST', 'localhost')
Run Code Online (Sandbox Code Playgroud)
虽然我觉得这可能适用于您可能不想提交的一些特定的数据库密码,但我真正想要的是能够为每个环境提交大部分或全部不同的环境值.
因此我想要的是.env将APP_ENV定义为"本地","暂存"或"生产",然后有一个包含值的.local.env或.env.local文件,然后我可以提交这些文件和正确的文件将根据APP_ENV加载.
这可能吗?Laravel 4有级联配置数组,看起来更灵活但是如果我可以有一个环境.env文件,那么我可以忍受.
最后通过修改app/Providers/ConfigServiceProvider.php来解决它.创建项目时,此文件将作为存根添加到应用程序文件夹,并用于覆盖配置值.
它现在处理级联配置,因此例如config/local/app.php中的任何值都将覆盖config/app.php.正如下面的评论所说,它不处理环境配置中的匹配数组,只会替换它.但是我可以在需要时解决这个问题.
<?php namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Symfony\Component\Finder\Finder;
class ConfigServiceProvider extends ServiceProvider {
/**
* Overwrite any vendor / package configuration.
*
* This service provider is intended to provide a convenient location for you
* to overwrite any "vendor" or package configuration that you may want to
* modify before the application handles the incoming request / command.
*
* Modified 2014-01-20 to allow environment specific configs to be loaded
* from app/config/[environment]/ which will cascade over the base configs.
*
* @return void
*/
public function register()
{
$config = app('config');
$envPath = app()->configPath() . '/' . getenv('APP_ENV');
foreach (Finder::create()->files()->name('*.php')->in($envPath) as $file)
{
$configName = basename($file->getRealPath(), '.php');
$oldConfigValues = $config->get($configName);
$newConfigValues = require $file->getRealPath();
// Replace any matching values in the old config with the new ones.
// Doesn't yet handle matching arrays in the config, it will just replace them.
$config->set($configName, $newConfigValues + $oldConfigValues);
}
}
}
Run Code Online (Sandbox Code Playgroud)
你不必须使用.env一切.有几个选择.
选项1 - 仅.env用于变量
'default' => env('DB_CONNECTION'),
Run Code Online (Sandbox Code Playgroud)
选项2 - 仅.env用于变量,但如果不存在则具有系统默认值
'default' => env('DB_CONNECTION', 'mysql'),
Run Code Online (Sandbox Code Playgroud)
选项3 - 只需对您的变量进行硬编码,而不是通过 .env
'default' => 'mysql',
Run Code Online (Sandbox Code Playgroud)
对于大多数配置选项,选项2可能是最好的.您仍然可以为您的git仓库定义(并提交)配置选项 - 但.env如果您愿意,您可以在将来轻松地在任何文件中覆盖它.
选项1最适合密码,应用程序密钥等 - 因此它们永远不会被提交到您的git仓库.
选项3适用于一些配置变量,您知道它们永远不会改变.
注意 - 级联的Laravel 4配置文件夹选项不再可用.
| 归档时间: |
|
| 查看次数: |
14804 次 |
| 最近记录: |