【问题标题】:Symfony bundle inheritance and twig templates overridingSymfony 包继承和树枝模板覆盖
【发布时间】:2017-04-01 15:26:36
【问题描述】:

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

谢谢,

【问题讨论】:

    标签: symfony


    【解决方案1】:

    @ 在 twig 语法中是一个称为“命名空间路径”的功能。 (documentation)

    使用{% include 'Bundle:Folder:template' %}的功能与{% include '@Bundle\Folder\template' %}不同。

    例如,如果您覆盖 fosub 包:

    {% 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 #}
    

    另外,我想补充一点,如果您只想覆盖一个模板(没有控制器、侦听器等全局功能),您可以将模板添加到您的应用程序目录。这在documentation中有很好的描述

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-10
      • 2015-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多