Laravel 9中如何在.env文件变量内使用base_path()函数
Laravel 9 .env文件使用base_path()相关问题解答
Laravel 9原生没有内置类似%basePath%的特殊字符串占位符,不支持直接在.env文件里通过特殊模式调用base_path()这类框架辅助函数。
原因很简单:.env文件的解析工作由底层依赖的vlucas/phpdotenv包负责,这个解析阶段框架还没完成启动,根本无法识别、执行框架自带的路径函数。
推荐实现方案
要实现根路径和自定义相对路径拼接的效果,完全不用在.env里硬写绝对路径,按框架规范走两步就行:
- 第一步:在.env中只配置相对路径片段
MY_PATH=/my/path
- 第二步:在config目录下的对应配置文件中,用
base_path()完成路径拼接
比如你可以新建config/path.php配置文件,写入如下内容:
<?php return [ 'my_custom_path' => base_path(env('MY_PATH')), ];
后续业务代码里不要直接读取env值,通过配置方法读取拼接好的完整路径即可:
$fullPath = config('path.my_custom_path');
注意:不要在业务逻辑里直接调用
env()读取值,生产环境执行php artisan config:cache开启配置缓存后,直接调用env()会返回null,只有通过config()读取配置的写法才是兼容所有环境的规范写法。
如果你非要在.env里实现类似占位符替换的效果,也可以在服务提供者里手动写字符串替换逻辑提前处理env值,但这种做法违反框架的配置加载规范,开启配置缓存、部署多环境时很容易出现路径错乱问题,非常不推荐使用。
内容的提问来源于stack exchange,提问作者Chenille33
相关产品推荐
相关产品推荐

