为什么直接在控制器中调用 env() 函数不起作用?

mst*_*std 0 laravel

env()支持 Laravel 6.20 应用程序,我看到控制器中调用了很多方法。它在我这边不起作用,所以我在 config/app.php 文件中创建了一个包装器,并使用它使其工作。我必须在应用程序中进行很多类似的更改才能使其正常工作......

但看起来这env() 对我的客户在实时和开发人员服务器上有效。我知道env() 直接调用控制器是一种不好的方法,但想知道为什么它在服务器上有效?有一些常见的 PHP 配置吗?

谢谢!

zah*_*mon 5

您可能已经通过运行缓存了您的配置php artisan config:cache

根据文件

此命令会将 Laravel 的所有配置文件合并到一个缓存文件中,这大大减少了框架在加载配置值时必须访问文件系统的次数。

进而

如果执行该config:cache命令,您应该确保仅从env配置文件中调用该函数。一旦配置被缓存,该.env文件将不会被加载,并且对变量env函数的所有调用都.env将返回null

您必须运行php artisan config:clear,这将清除缓存文件。您将能够env再次获得这些值。

但是,不要直接使用.env文件中的任何值。有一些问题。为了获得更高的性能,请缓存配置。因此将env值包装在配置键中,如下所示config/app.php

'name' => env('APP_NAME', 'Laravel')
Run Code Online (Sandbox Code Playgroud)

您是说使用文件APP_NAME中的密钥env作为您的 laravel 应用程序名称,并且如果没有默认使用APP_NAME的密钥或值。envLaravel

其次,如果您在很短的时间内发出一些请求,例如页面加载,并且您同时调用一些 xmlhttp 请求,则如果您必须使用任何值,则有可能无法获取env值(返回)。null这是一个 php 错误。因此,请env从配置文件中读取具有默认值的值,以提高性能并避免错误。