Symfony HTML模板在生产环境失效问题求助
解决Symfony邮件模板在Hostinger生产环境找不到的问题
核心排查与修复步骤
从错误日志能看到,Twig仅在/public_html/templates和Symfony内置Form视图目录检索模板,说明问题出在模板路径、文件存在性或配置上,按以下步骤逐一验证:
1. 核对服务器上的模板文件状态
- 确认文件位置:检查
main/email/admission_mail.html.twig是否确实存在于服务器的/home/u511184722/domains/example.com/public_html/templates/目录下,完整路径应为/home/u511184722/domains/example.com/public_html/templates/main/email/admission_mail.html.twig - 注意大小写:Hostinger用的是Linux系统,文件名严格区分大小写,但本地Windows不区分。比如本地是
Admission_Mail.html.twig,服务器上是小写文件名的话就会匹配失败,必须完全一致 - 检查权限:确保模板文件权限设为
644、父目录权限设为755,避免PHP进程无法读取文件
2. 验证Twig配置与缓存
- 打开
config/packages/twig.yaml,确认模板路径配置正确:
生产环境下如果有自定义路径配置,要确保没有被环境变量覆盖twig: paths: '%kernel.project_dir%/templates': templates - 清理生产环境缓存:Symfony会缓存模板路径,执行以下命令刷新缓存(通过Hostinger的SSH终端或控制面板工具执行):
php bin/console cache:clear --env=prod
3. 修正模板引用路径
- 使用
TemplatedEmail时,模板路径是相对于templates目录的相对路径。比如模板实际在templates/main/email/admission_mail.html.twig,就必须写main/email/admission_mail.html.twig,不能多写或少写层级 - 改用
renderView时同样要严格对应路径,示例代码修正如下:$email = (new Email()) ->html($this->renderView('main/email/admission_mail.html.twig', [ 'name' => $name, ]));
4. 检查部署同步情况
- 确认部署时
templates/main/email目录及文件已完整同步到服务器,避免Git、FTP上传时遗漏或文件损坏。可以直接在服务器上查看文件内容,验证文件是否存在且完整
额外提示
- 如果你用的是Symfony Flex结构,模板默认放在
templates目录,不要混淆旧版本的app/Resources/views路径(该路径已废弃) - 测试时可以先创建一个极简的
templates/test.html.twig,用代码引用test.html.twig,快速排查路径是否正常
内容的提问来源于stack exchange,提问作者Demi God
相关产品推荐
相关产品推荐

