Symfony升级至3.4.2后PageBundle加载TwigRenderer运行时失败求助
看起来你在升级Symfony到3.4.2后遇到了Twig运行时加载的问题,而且升级Twig到2.4.4也没解决——这个问题大概率是Sonata Page Bundle与Symfony 3.4的版本兼容性,或者Twig相关组件的版本不匹配导致的,下面是一步步的解决方案:
1. 先确认Sonata Page Bundle的兼容版本
Symfony 3.4需要搭配特定版本的Sonata Page Bundle,旧版本的Sonata Page Bundle可能没有适配Twig 2.x和Symfony 3.4的Form组件。你需要把Sonata Page Bundle升级到兼容Symfony 3.4的版本(比如^3.14系列,这是官方推荐的Symfony 3.4兼容版本):
composer require sonata-project/page-bundle:^3.14
运行这个命令后,Composer会自动调整相关依赖,确保Sonata组件和Symfony 3.4适配。
2. 确保Symfony Twig相关组件版本一致
升级后要检查symfony/twig-bridge和symfony/twig-bundle的版本是否和Symfony核心版本(3.4.2)一致——版本不一致很容易导致类加载冲突:
composer show symfony/twig-bridge symfony/twig-bundle
如果输出的版本不是3.4.*,执行下面的命令强制对齐版本:
composer require symfony/twig-bridge:3.4.* symfony/twig-bundle:3.4.*
3. 检查Twig运行时的配置
在Symfony 3.4 + Twig 2.x的组合中,有时候需要手动确保Form的Twig运行时被正确注册。打开app/config/config.yml,检查Twig配置部分是否包含以下内容:
twig: # 其他配置... runtime: - Symfony\Bridge\Twig\Form\TwigRendererRuntime
如果没有,添加这段配置。另外,也可以检查app/config/services.yml中是否有TwigRenderer的服务定义,如果缺失,补充:
services: # 其他服务... Symfony\Bridge\Twig\Form\TwigRenderer: public: false arguments: ['@twig.form.renderer'] Symfony\Bridge\Twig\Form\TwigRendererRuntime: public: false arguments: ['@Symfony\Bridge\Twig\Form\TwigRenderer'] tags: - { name: twig.runtime }
4. 彻底清除缓存
升级依赖后,旧的缓存文件很可能残留了过时的类路径信息,一定要清除缓存:
php bin/console cache:clear --env=dev
如果是生产环境,记得加上--env=prod参数。
完成以上步骤后,再访问Sonata Page的treeAction页面,应该就能解决TwigRenderer加载失败的问题了。
内容的提问来源于stack exchange,提问作者user6830821

