【问题标题】:how does "{% use %}" work in twig using symfony3?“{% use %}”如何使用 symfony3 在 twig 中工作?
【发布时间】:2016-07-29 12:11:41
【问题描述】:

我正在尝试使用 {% use %} 语法从基本模板中的子模板导入块,如http://twig.sensiolabs.org/doc/tags/use.html 中所述,但我遇到了一些问题,所以我想知道我在做什么不见了。

我有以下文件

#base.html.twig
<!DOCTYPE html>
<html>
    {% use ':admin/page:body.html.twig' %}
</html>

#admin/page/body.html.twig
{% block contentBody %}
    <body>
        <p>Test Body</p>
    </body>
{% endblock %}

最后

#default/index.html.twig
{% extends base.html.twig %}

{% block contentBody %}
   <body>
      <p>Test ContentBody</p>
   </body>
{% endblock %}

据我了解,根据文档,前两个文件几乎就像我声明一个文件一样

#base.html.twig
<!DOCTYPE html>
<html>
{% block contentBody %}
    <body>
        <p>Test Body</p>
    </body>
{% endblock %}
</html>

我的控制器呈现默认/index.html.twig

将前 3 个文件一起使用会产生一个空白页面,尽管我认为它应该呈现“Test ContentBody”

如果我用最后一个 sn-p 替换 base.html.twig 内容,它会正常工作并呈现“Test ContentBody”

如果我将 use 命令替换为 include 它会按预期产生“测试正文”

如果有人可以向我解释我做错了什么,或者引导我朝着正确的方向了解我在文档中遗漏的内容,我将不胜感激。在此先感谢

PS:我也尝试在 admin/page/body.html.twig 中声明该块 像这样

#admin/page/body.html.twig
{% block contentBody %}{% endblock %}

如果它因为文档中的部分而中断,即当您“使用”模板时,它们不应该有正文,但它没有帮助。

【问题讨论】:

    标签: twig symfony


    【解决方案1】:

    使用use 导入块不会自动输出它们,因此您仍然需要在基本模板中定义它们:

    #base.html.twig
    <!DOCTYPE html>
    <html>
        {% use ':admin/page:body.html.twig' %}
        {% block contentBody %}
            parent()
        {% endblock %}
    </html>
    

    use 主要用于通过 block() 函数重用块。

    【讨论】:

    • 经过几个小时的努力,我自己也意识到了这一点,你所说的对我有用。感谢您的回复,我会将其标记为已解决。您介意通过块功能重用它们来澄清您的意思吗?
    • 没关系,我想通了。您可以调用 {% use ... %} 然后稍后在 {{ block('contentBody') }}
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-16
    • 2018-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-17
    • 1970-01-01
    相关资源
    最近更新 更多