Symfony5:如何将控制器渲染Twig模板的默认路径改为Bundle内目录
修改Symfony默认Twig模板查找路径的方法
方法一:通过Bundle类配置(Bundle专属路径)
要是想让这个Bundle的控制器默认加载自身Resource/views/下的模板,直接修改Bundle的主类文件(src/veo/SomeBundle/SomeBundle.php),添加模板路径配置:
namespace veo\SomeBundle; use Symfony\Component\HttpKernel\Bundle\Bundle; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Bundle\TwigBundle\DependencyInjection\Compiler\TwigPathPass; class SomeBundle extends Bundle { public function build(ContainerBuilder $container) { parent::build($container); // 注册当前Bundle的模板路径为顶级查找路径 $container->addCompilerPass(new TwigPathPass([ __DIR__.'/Resources/views' => '', // 空字符串表示该路径为顶级查找路径 ])); } }
配置后,控制器里的render('index.html.twig')就会优先从src/veo/SomeBundle/Resources/views/下查找模板。
方法二:全局配置文件设置(全局生效)
要是想全局修改Twig的默认模板查找路径,或者给指定路径设置优先级,编辑项目根目录下的config/packages/twig.yaml文件,添加自定义路径:
twig: paths: # 将Bundle的views路径设为顶级路径,优先级高于默认的templates/ '%kernel.project_dir%/src/veo/SomeBundle/Resources/views': '' # 保留原默认路径(可选,不需要的话可以删掉) '%kernel.project_dir%/templates': ~
配置完记得清除缓存让设置生效:
php bin/console cache:clear
临时解决方案(单个方法生效)
要是只是某一个控制器方法里需要加载Bundle下的模板,也可以直接用Bundle前缀写法,不用改任何配置:
return $this->render('@SomeBundle/index.html.twig', [ "article" => $articles ]);
这种写法会直接加载src/veo/SomeBundle/Resources/views/index.html.twig模板,适合临时场景。
内容的提问来源于stack exchange,提问作者user1353327
相关产品推荐
相关产品推荐

