$environment = App::environment();
// or check on an array of environments:
if (App::environment(['local', 'staging'])) {
// The environment is either local OR staging...
}
// or App:: whichever you prefer.
if (app()->environment('local', 'staging')) {
logger("We are not live yet!");
Seeder::seedThemAll();
} else {
logger("We are LIVE!");
}
Route::get('/', function () {
// to experiment: set APP_ENV=production in your .env file
echo 'Via env(): ' . env('APP_ENV') . '<br/>'; // production
echo 'Via config(): ' . config('app.env'); // production
/*
|--------------------------------------------------------------------------
| run: php artisan config:cache
|--------------------------------------------------------------------------
|
| The config:cache command will generate a configuration cache file (config.php) in the bootstrap/cache directory.
| At this point, the env() helper will no longer work as all ENV variables will be flushed in favor of the cached config.php file.
|
*/
echo '<hr/>';
echo 'Via env(): ' . env('APP_ENV') . '<br/>'; // null
echo 'Via config(): ' . config('app.env'); // production
/*
|--------------------------------------------------------------------------
| run: php artisan config:clear
|--------------------------------------------------------------------------
|
| The config:clear command will remove (config.php) configuration cache file from the bootstrap/cache directory.
| At this point, the env() helper will work again as framework doesn't find a cached configuration file.
|
*/
echo '<hr/>';
echo 'Via env(): ' . env('APP_ENV') . '<br/>'; // production
echo 'Via config(): ' . config('app.env'); // production
});
6条答案
按热度按时间kh212irz1#
env()
App::environment()
检查环境(. env中的APP_ENV)。config('app.var')
,例如:config('app.debug')
在您的. env中:
MY_VALUE=foo
示例
config/myconfig.php
在代码中访问:
我只是觉得它。当你缓存你的配置文件时,
env()
会(有时?)不工作。所以我发现:env()
。在代码中使用config()
帮助器而不是env()
。例如,您可以在代码中调用config('app.env')
。1.当您使用
php artisan config:cache
时,框架会缓存所有配置字符串,并且您对.env
文件所做的任何更改都不会生效,直到您再次运行php artisan config:cache
命令。来自Laracast上的this article:
更新:
只要不使用
php artisan config:cache
,env()
调用就可以工作。因此,这非常危险,因为它通常在开发时工作**,但在生产时会失败**。请参阅升级指南如果在部署期间使用config:cache命令,则必须确保仅从配置文件中调用env函数,而不是从应用程序中的任何其他位置调用。
如果要从应用程序内部调用env,强烈建议您向配置文件中添加适当的配置值,并从该位置调用env,从而将env调用转换为config调用。
更新Laravel 5.6:
Laravel现在在其文档中建议使用
并且描述了
env()
仅仅是从配置文件中的.env
获取值,例如config('app.env')
或config('app.debug')
。px9o7tmv2#
你有两个同样好的选择
或
app()-〉environment()实际上由Bugsnag使用,请查看here文档
默认情况下,我们将通过调用Laravel应用程序示例上的environment()函数来自动检测应用程序环境。
现在,差异:
1)
env(...)
函数在缓存配置后返回空值。在生产中经常发生这种情况。2)你可以在单元测试中改变
config
参数,这给了你测试的灵活性。r55awzrz3#
要考虑的一件事可能是将string传递给
app()->environment()
以验证当前环境的便利因素。trnvg8h34#
如果在部署期间使用
config:cache
命令,则必须确保仅从配置文件中调用env
函数,而不是从应用程序中的任何其他位置调用。如果您正在从应用程序内部调用env,强烈建议您将正确的配置值添加到配置文件中,并从该位置调用env,从而允许您将
env
调用转换为config调用。将env配置选项添加到
app.php
配置文件中,如下所示:更多信息:https://laravel.com/docs/5.2/upgrade#upgrade-5.2.0
xxslljrj5#
2023年更新答案
bootstrap/cache
目录中没有config.php
时,env()
帮助器工作config()
助手在config.php
文件存在或不存在的情况下都起作用。如果文件不存在,则if将在运行时解析变量,但如果确实找到了一个;它使用高速缓存的版本。在生产环境中,我们运行
artisan
命令来添加/删除配置文件. php,这对于env()
和config()
的行为至关重要。请考虑以下示例以理解此概念:
因此,一般的经验法则是始终在代码文件中使用
config()
帮助器;这样,无论缓存配置文件是否可用,代码都不会爆炸。现在得到
environment
是如此重要和普遍; Laravel为我们提供了几种方法来实现同样的目标:请记住,您使用的是
App
facade或app()
helper,它们都将使用config
helper。luaexgnf6#
在12factor methodology中应用程序包含两种类型的配置值:
./config/
文件夹中。在这种类型中,我们通常存储应用程序中使用的一些技术最佳/良好值,用户不应随时间更改,例如最佳图像压缩级别、连接超时、会话到期时间等。.env
文件中(但不应存储在git repo中,但是带有示例值和详细信息的.env.example
可以存储在repo中)。在这种类型中,我们通常存储一些重要/受保护的值,这些值取决于本地环境,例如密码,调试模式,数据库地址等。Laravel为此提出了简便的方法
config(...)
helper(因此在此级别上,程序员不需要知道哪些配置值是内部,哪些是外部)env(...)
助手设置,例如在config/app.php'debug' => env('APP_DEBUG', false)
中