-2

我有一个 symfony3/twig 骨架模板

page1/skeleton.twig
    {# set default values #}
    {% block content %}
    {% set test = {
            sec1: {
                title:   "null",
                content: 'null'
            },
      }
    %}
    {% endblock %}
    <ul>
19        {% for sec in test[0:] %}
        <li>
            <p>{{ sec.title }}</p>
            <div>
                <p>{{ sec.content }}</p>
            </div>
        </li>
     {% endfor %}
    </ul>

然后我创建一个布局模板,用“真实”数据扩展骨架

page1/layout.html.twig
    {% extends 'page1/skeleton.html.twig' %}

    {% block content %}
    {% set test = {
        sec1: {
            title:   "title1",
            content: 'content2'
        },
        sec2: {
            title:   "title2",
            content: 'content2'
        }
    %}
    {% endblock %}

但是当我生成/发布页面时,Symfony 会触发一个错误

Variable "test" does not exist in :page1:skeleton.html.twig at line 19
500 Internal Server Error - Twig_Error_Runtime

抱怨骷髅本身。

该“测试”数组在骨架中定义。阅读有关“block”、“extends”和“set”的文档后,无法弄清楚到底是什么问题。

我需要改变什么来消除这个错误?

4

2 回答 2

2

blocksintwig有自己的变量范围。
在块内创建的变量不能在块外访问。

Imo 你应该只测试变量是否存在,否则创建默认值:

skeleton.twig

    {% if not test  is defined %}
        {% 
            set test = {
                sec1: {
                    title:   "null",
                    content: 'null'
                },
            }
        %}
    {% endif %}
    <ul>
    {% for sec in test[0:] %}
        <li>
            <p{{ sec.title }}</p>
            <div>
                <p>{{ sec.content }}</p>
            </div>
        </li>
    {% endfor %}
    </ul>

controller.php

<?php
    echo $twig->render('page/page.twig', array(
           'foo' => [
               'title' => 'title1',
               'content' => content1',
            ],
    );
于 2016-09-09T05:44:23.027 回答
-2

在文件 page1/skeleton.twig 中更改它:

{% for sec in test %}

然后它将起作用。我尝试过这个。确保你明白为什么!

于 2016-09-09T05:00:58.933 回答