【问题标题】:Can't override extended twig template block to empty无法将扩展的树枝模板块覆盖为空
【发布时间】:2012-11-05 13:50:31
【问题描述】:

我在 Symfony 2.1.3 中使用 MopaBootstrapBundleTwig 模板。 这个包有 base.html.twig 模板,其中包含脚本块:

{% block foot_script %}
    {# To only use a subset or add more js overwrite and copy paste this block
    To speed up page loads save a copy of jQuery in your project and override this block to include the correct path
    Otherwise the regeneration is done on every load in dev more with use_controller: true
     #}
    {% javascripts
        'http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js'
        '@MopaBootstrapBundle/Resources/bootstrap/js/bootstrap-transition.js'
        '@MopaBootstrapBundle/Resources/bootstrap/js/bootstrap-modal.js'
        '@MopaBootstrapBundle/Resources/bootstrap/js/bootstrap-dropdown.js'
        '@MopaBootstrapBundle/Resources/bootstrap/js/bootstrap-scrollspy.js'
        '@MopaBootstrapBundle/Resources/bootstrap/js/bootstrap-tab.js'
        '@MopaBootstrapBundle/Resources/bootstrap/js/bootstrap-tooltip.js'
        '@MopaBootstrapBundle/Resources/bootstrap/js/bootstrap-popover.js'
        '@MopaBootstrapBundle/Resources/bootstrap/js/bootstrap-alert.js'
        '@MopaBootstrapBundle/Resources/bootstrap/js/bootstrap-button.js'
        '@MopaBootstrapBundle/Resources/bootstrap/js/bootstrap-collapse.js'
        '@MopaBootstrapBundle/Resources/bootstrap/js/bootstrap-carousel.js'
        '@MopaBootstrapBundle/Resources/bootstrap/js/bootstrap-typeahead.js'
        '@MopaBootstrapBundle/Resources/public/js/mopabootstrap-collection.js'
        '@MopaBootstrapBundle/Resources/public/js/mopabootstrap-subnav.js'
    %}
<script type="text/javascript" src="{{ asset_url }}"></script>
{% endjavascripts %}
{% endblock foot_script %}

我在我的模板中扩展它:

{% extends 'MopaBootstrapBundle::base.html.twig' %}
{% block foot_script %}{% endblock foot_script %}

但它仍然尝试加载 Bundle 的 base.html.twig 模板,我得到:

模板编译过程中抛出异常 ("找不到文件 “@MopaBootstrapBundle/Resources/bootstrap/js/bootstrap-transition.js”。”) 在“MopaBootstrapBundle::base.html.twig”中。


我发现,如果你像这样扩展它:

{% extends 'MopaBootstrapBundle::base.html.twig' %}
{% block foot_script %}
    {% javascripts
        '@MopaBootstrapBundle/Resources/bootstrap/js/bootstrap-typeahead.js'
        '@MopaBootstrapBundle/Resources/public/js/mopabootstrap-collection.js'
        '@MopaBootstrapBundle/Resources/public/js/mopabootstrap-subnav.js'
    %}
<script type="text/javascript" src="{{ asset_url }}"></script>
{% endjavascripts %}
{% endblock foot_script %}

注意 typeahead.js

我明白了:

模板编译过程中抛出异常 ("找不到文件 “@MopaBootstrapBundle/Resources/bootstrap/js/bootstrap-typeahead.js”。”) 在“MopaBootstrapBundle::base.html.twig”中。

如果我只删除一行:

{% extends 'MopaBootstrapBundle::base.html.twig' %}
{% block foot_script %}
    {% javascripts
        '@MopaBootstrapBundle/Resources/public/js/mopabootstrap-collection.js'
        '@MopaBootstrapBundle/Resources/public/js/mopabootstrap-subnav.js'
    %}
<script type="text/javascript" src="{{ asset_url }}"></script>
{% endjavascripts %}
{% endblock foot_script %}

我明白了:

模板编译过程中抛出异常 ("找不到文件 “@MopaBootstrapBundle/Resources/bootstrap/js/bootstrap-transition.js”。”) 在“MopaBootstrapBundle::base.html.twig”中。

它仍然尝试从基本模板加载所有脚本。

任何建议如何覆盖 *foot_script* 块以使其为空而不加载这些 JS 文件?

【问题讨论】:

  • 我认为问题在于首先解析 {% javascripts %} 标签,然后解析 {% block %} 标签。我不知道你怎么能解决这个问题。 This issue by fabpot 可以帮到你吗?
  • 我什至不知道这是否是一个解决方案(我不这么认为),但是如果在该引导目录中找到文件,那么它会按预期工作。
  • 作为一个快速修复,也许从你的包中加载一些虚拟的空 js 文件,例如: {% extends 'MopaBootstrapBundle::base.html.twig' %} {% block foot_script %} {% javascripts ' @MyBundle/Resources/public/js/dummy-file.js'%} {% endblock foot_script %}

标签: symfony bundle block twig template-engine


【解决方案1】:

您想要嵌入 MopaBootstrapBundle::base.html.twig,而不是扩展它。你应该使用 Twig 的embed 标签:

{% embed 'MopaBootstrapBundle::base.html.twig' %}
    {% block foot_script %}{% endblock foot_script %}
{% endembed %}

来自 Twig 的文档:

embed 标签结合了 include 和 extends 的行为。它允许您包含另一个模板的内容,就像 include 一样。但它也允许您覆盖在包含的模板中定义的任何块,例如在扩展模板时。

【讨论】:

  • 在 Twig 1.8 中添加了 embed 标签。
猜你喜欢
  • 1970-01-01
  • 2015-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-01
  • 2017-04-01
  • 2012-02-20
  • 1970-01-01
相关资源
最近更新 更多