Laravel启用配置缓存时如何获取Nginx环境变量
解决Laravel配置缓存后视图路径依赖环境变量失效的问题
问题核心是php artisan config:cache会将配置文件中的env('WEBSITE')替换为缓存执行时的静态值,而非运行时动态读取的环境变量,导致生产环境多站点视图路径失效。以下是无需修改视图文件的简单解决方案:
方案:通过服务提供者动态设置视图路径
Laravel的服务提供者boot方法会在每次请求时执行,可在这里动态读取当前环境变量并设置视图路径,不受配置缓存影响。
- 打开
app/Providers/AppServiceProvider.php - 在
boot方法中添加以下代码:
public function boot() { // 读取当前站点的环境变量 $website = env('WEBSITE'); // 优先加载站点专属视图目录,不存在则用默认视图目录 $viewPaths = [resource_path('views')]; if ($website) { array_unshift($viewPaths, resource_path('views/' . $website)); } // 替换视图查找器的路径列表 view()->getFinder()->setPaths($viewPaths); }
- 保存文件后,重新部署时正常执行
php artisan config:cache即可
代码说明:
array_unshift确保站点专属视图目录的优先级高于默认目录,优先加载站点定制视图- 若不需要默认目录的 fallback,直接设置
$viewPaths = [resource_path('views/' . $website)]即可 - 该逻辑完全绕过配置文件的静态缓存,每次请求都会读取当前的
WEBSITE环境变量
为什么原方案失效?
当执行config:cache时,Laravel会将所有配置文件编译为一个静态数组文件,此时配置文件中的env('WEBSITE')会被替换为执行缓存命令时的环境变量值,而非运行时动态读取。生产环境中不同站点的WEBSITE变量不同,但缓存文件已经固化了路径,导致视图加载失败。
内容的提问来源于stack exchange,提问作者Ivan S
相关产品推荐
相关产品推荐

