Symfony包继承和覆盖模板覆盖

时间:2016-11-17 22:05:10

标签: symfony

我有一个名为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快捷方式的情况下引用资源,则无法以这种方式覆盖它们。

谢谢,

1 个答案:

答案 0 :(得分:2)

twig语法中的

@是一个名为“命名空间路径”的功能。 (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

中有详细描述