使用env('APP_ENV'),config('app.env')或App :: environment()获取应用环境有什么区别?

时间:2016-10-13 16:57:12

标签: laravel laravel-5 environment-variables config laravel-dotenv

使用env('APP_ENV')config('app.env')App::environment()获取应用环境有什么区别?

我知道env('APP_ENV')$_ENVconfig('app.env')读取配置,App::environment()是所有内容的抽象。在我看来,优势甚至是这个。的抽象

我不知道是否存在其他差异,例如表现水平或安全性

5 个答案:

答案 0 :(得分:13)

我感觉到了。当您缓存配置文件时,env()将(有时?)无法正常工作。所以我发现了:

  1. Laravel建议仅在配置文件中使用env()。在代码中使用config()帮助程序而不是env()。例如,您可以在代码中调用config(' app.env')。
  2. 当您使用php artisan config:cache时,框架会缓存所有配置字符串,并且在您再次运行php artisan config:cache命令之前,对.env文件所做的任何更改都不会处于活动状态。
  3. 从这里: https://laracasts.com/discuss/channels/general-discussion/env-not-reading-variables-sometimes

    <强>更新
    env()调用工作,只要你不使用php artisan config:cache。所以它非常危险,因为它通常会在开发时生效,但在生产时会失败。请参阅升级指南:https://laravel.com/docs/5.2/upgrade#upgrade-5.2.0

    更新Laravel 5.6:
    Laravel现在建议在其documentation中使用

    $environment = App::environment();
    

    describes env()只是从配置文件中的.env中检索值。但这仅适用于配置(&#39; app.env&#39;),并不适用于其他变量,例如配置(&#39; app.debug&#39;)。

答案 1 :(得分:1)

要考虑的一件事可能是将字符串传递给foreach($data as $index => $d){ $flight = Flight::create($d); $flight->crews()->attach($request->input('flight_crew_list[' . $index . ']')); } 以便验证当前环境的便利因素。

app()->environment()

答案 2 :(得分:0)

你有两个同样好的选择

let path = UIBezierPath(points: points)

let shapeLayer = CAShapeLayer(path: path, lineColor: UIColor.blue, fillColor: UIColor.lightGray)

view.layer.addSublayer(shapeLayer)

if (\App::environment('production')) {...}

app() - &gt;环境()实际上由Bugsnag使用,请查看文档here,它说

  

默认情况下,我们会通过调用Laravel应用程序实例上的environment()函数自动检测应用程序环境。

答案 3 :(得分:0)

如果在部署期间使用config:cache命令,则必须确保只从配置文件中调用env函数,而不是从应用程序中的任何其他位置调用。{/ p>

如果您在应用程序中调用env,强烈建议您为配置文件添加正确的配置值,并从该位置调用env,允许您将env调用转换为config调用。 / p>

app.php配置文件中添加一个env配置选项,如下所示:

'env' => env('APP_ENV', 'production'),

更多:https://laravel.com/docs/5.2/upgrade#upgrade-5.2.0

答案 4 :(得分:0)

12factor methodology中,应用程序包含两种类型的配置值:

  • 内部,在部署之间没有差异,并存储在laravel ./config/文件夹中。在这种类型中,我们通常会存储一些在应用中使用的技术最佳/良好值,用户不应随时间更改这些值(例如,最佳图像压缩级别,连接超时,会话到期时间等。
  • 外部,在部署之间会有所不同,并存储在.env文件中(但不应存储在git repo中,但是带有详细信息的示例值的.env.example可以存储在repo中)。在这种类型中,我们通常存储一些重要/受保护的值,这些值取决于本地环境,例如密码,调试模式,数据库地址等。

Laravel为此提供了便捷的方法

  • 在常规代码中,我们仅使用config(...)帮助程序(因此,在此级别上,程序员无需知道哪个配置值是内部的,哪个是外部的)
  • 在配置代码中,应使用env(...)帮助程序来设置外部配置值,例如在config / app.php 'debug' => env('APP_DEBUG', false)