Symfony4中设置环境变量为文件路径遇报错,如何正确配置?
解决Symfony4中配置CREDENTIALS_PATH环境变量的问题
我来帮你搞定这个路径识别的问题,其实核心是Symfony里环境变量的路径解析逻辑,咱们一步步来:
先确认.env里的路径写法本身没问题
Symfony的.env文件里的相对路径默认是相对于项目根目录的,所以你写的CREDENTIALS_PATH=config/credentials.json是正确的——前提是你的config文件夹确实在项目根目录下(和src、public同级)。问题大概率出在读取环境变量的方式上
如果你直接用getenv('CREDENTIALS_PATH')或者$_ENV['CREDENTIALS_PATH'],拿到的只是字符串,不会自动转成绝对路径。这时候得结合Symfony的内核参数来处理:// 比如在控制器里这么写 $projectDir = $this->getParameter('kernel.project_dir'); $credentialsFullPath = $projectDir . '/' . $_ENV['CREDENTIALS_PATH'];更优雅的方式是在配置文件里先转成带绝对路径的参数,再注入到服务中:
# config/services.yaml parameters: credentials.path: '%kernel.project_dir%/%env(CREDENTIALS_PATH)%' services: # 举个例子,把路径注入到你的服务里 App\Service\YourCredentialService: arguments: $credentialsPath: '%credentials.path%'备选方案:直接写绝对路径
要是嫌相对路径麻烦,也可以直接在.env里写绝对路径,比如:# .env CREDENTIALS_PATH=/Users/yourname/projects/your-symfony-app/config/credentials.json不过这种方式在不同环境(本地、服务器)切换时要手动修改,灵活性差一些。
别忘了检查权限和清缓存
有时候路径对了,但PHP进程没权限读credentials.json,也会报错,把文件权限设为644一般就没问题。另外修改.env后一定要清缓存:# 开发环境 php bin/console cache:clear # 生产环境 php bin/console cache:clear --env=prod
内容的提问来源于stack exchange,提问作者M. Marc
相关产品推荐
相关产品推荐

