我有一个名为VendorDeliveryBundle的第三方软件包。
我想在我的一个App twig模板中覆盖我用这种语法调用的一个twig模板:
{% include '@VendorDelivery/Frontend/Booking/_delivery.html.twig' with { 'form': form } only %}
像这样工作,调用供应商模板。
但是如果我想通过在AppKernel中注册覆盖包(如https://symfony.com/doc/2.8/bundles/inheritance.html中所述)并通过创建:来覆盖此模板:
App/DeliveryBundle/Resources/views/Frontend/Booking/_delivery.html.twig
此模板不会覆盖供应商模板。
但是,如果我使用这种语法
{% include 'VendorDeliveryBundle:Frontend:Booking/_delivery.html.twig' with { 'form': form } only %}
模板被覆盖。
似乎@语法无法按预期工作。
考虑到这个symfony文档https://symfony.com/doc/2.8/bundles/inheritance.html,我想知道这是一个错误还是一个正常的行为:
当您使用@ FOSUserBundle / Resources / config / routing / security.xml方法引用资源时,覆盖资源才有效。如果在不使用@BundleName快捷方式的情况下引用资源,则无法以这种方式覆盖它们。
谢谢,
答案 0 :(得分:2)
@
是一个名为“命名空间路径”的功能。 (documentation)
使用{% include 'Bundle:Folder:template' %}
的功能与{% include '@Bundle\Folder\template' %}
不同。
对于示例,如果覆盖fosub bundle:
{% include '@FOSUser/Security/login.html.twig' %} {# Will be fosub template #}
{% include '@User/Security/login.html.twig' %} {# Will be overrided template #}
{% include 'FOSUserBundle:Security:login.html.twig' %} {# Also will be overrided template #}
另外,我想补充一点,如果你只想覆盖一个模板(没有控制器,监听器等全局功能),你可以将模板添加到你的app目录。这个documentation
中有详细描述