我有布局模板
<html>
<body>
{% block content %}{% endblock %}
</body>
</html>很多子模板都是这样的
{% extends 'layout/default.twig' %}
{% block content %}
    <p>content</p>
{% endblock %}非常恼人的是,Twig中的每个子模板都必须包含由父块扩展的{% block content %}...{% endblock %},否则会出现错误:--扩展另一个模板的模板不能有一个主体。
是否有任何解决方案将某个变量中的所有子模板输出(不位于任何块中)绑定,然后使用它粘贴到父模板中?如下所示:
布局
<html>
<body>
{{ _context.childOutput }
</body>
</html>孩子
{% extends 'layout/default.twig' %}
<p>content</p>它将使子模板代码更加紧凑,并且不存在来自父模板块名称的依赖。
UPD在Twig's GitHub https://github.com/twigphp/Twig/issues/2027上提交了新一期
发布于 2016-04-27 08:28:08
每个模板中的2行允许您在一个模板中重新定义多个块。我看不出你想要的解决方案是怎么做到的。
<html>
<head>
{% block meta %}{% endblock %}
</head>
<body>
{% block content %}{% endblock %}
</body>
</html>您可以看到包括和嵌入,但是如果模板中只有一个块,那么小枝可能不是您需要的解决方案。
发布于 2016-04-28 11:59:43
在这个GitHub问题中看到您在控制器中定义变量时,我有以下想法。我假设子模板只包含静态代码,因为您没有描述这一点。
您可以修改控制器中的函数,以便获取子模板的内容,然后将其直接传递给父模板:
function acmeAction()
{
    // …
    return $this->render(
        'AcmeBundle:layout:default.html.twig',
        array(
            'title' => $title,
            'description' => $description,
            'content' => file_get_contents(
                $this->container->get('kernel')->locateResource(
                    '@AcmeBundle/Resources/views/layout/child.html.twig'
                )
            )
        )
    );
}以及父模板:
<head>
    <title>{% block title %}{{ title }}{% endblock %}</title>
    <meta name="description" content="{% block description %}{{ description }}{% endblock %}" />
</head>
<body>
    {% block body %}{{ content }}{% endblock %}
</body>这样您就不需要在子模板中定义父模板了。
发布于 2016-04-27 15:24:30
您可以在子变量中定义一些变量,并将它们显示在父变量中:
布局
<html>
<body>
{{ myValue }
</body>
</html>孩子
{% set myValue %}
    <p>content</p>
{% endset %}
{% include 'layout/default.twig' %}这样做是因为:
包含的模板可以访问活动上下文的变量。
来源:http://twig.sensiolabs.org/doc/tags/include.html
非常恼人的是,Twig中的每个子模板都必须包含由父块扩展的
{% block content %}...{% endblock %}
当您只有一个变量时,它可能听起来很烦人,但是当您还必须定义页面的标题、JavaScript代码等时,您将看到这种方法的好处。在这种情况下,使用多个{% block … %}是非常有用的。
参见此示例:
布局
<html>
<head>
    <title>{% block title %}{% endblock %}</title>
</head>
<body>
    {% block content %}{% endblock %}
    {% block javascript %}{% endblock %}
</body>
</html>孩子
{% extends 'layout/default.twig' %}
{% block title %}
    My title
{% endblock %}
{% block content %}
    <p>content</p>
{% endblock %}
{% block javascript %}
    <script>…</script>
{% endblock %}https://stackoverflow.com/questions/36881696
复制相似问题