Twig:在循环中设置变量,在循环外部使用它

时间:2014-07-15 12:43:51

标签: php symfony twig symfony-2.4

我尝试使用driverid定义set作为for driver in assigned.driver周期中的var,以便稍后使用。请参阅下文我正在做的事情:

{% for key, assigned in pgn %}
    <tr id="device-{{ assigned.id }}">
        <td>{{ assigned.imei }}</td>
        <td>{{ assigned.description }}</td>
        <td>
            {% for driver in assigned.driver %}
                {{ driver.driver.id }} {# check if driver.driver.id has values testing purposes - delete me #}
                {% set driverid = driver.driver.id %}

                {% if driver.driver.name != "" %}
                    {% if driver.driver.name %}
                        {{ driver.driver.name }}
                    {% else %}
                        -
                    {% endif %}
                {% endif %}
            {% endfor %}
        </td>
        <td>
            <button class="btn btn-xs btn-default"
                    onclick="openAlert({{ assigned.id }}, {{ driverid }}, 'unlink')"
                    data-original-title="{{ "devices.actions.unlink"|trans }}"
                    title="{{ "devices.actions.unlink"|trans }}">
                <i class="fa fa-times"></i>
            </button>
            <button class="btn btn-xs btn-default"
                    onclick="openAlert({{ assigned.id }}, null, 'delete')"
                    data-original-title="{{ "button.delete"|trans }}"
                    title="{{ "button.delete"|trans }}">
                <i class="fa fa-times"></i>
            </button>
        </td>
    </tr>
{% endfor %}

但是我收到了这个错误:

  

变量&#34; driverid&#34;在...中不存在   /var/www/html/src/Device/DeviceBundle/Resources/views/List/listDevices.html.twig   第74行

设置该var以便稍后在openAlert()调用时使用的正确方法是什么?或者在其他方面,我如何让driver.driver.id将其作为参数传递给openAlert()函数?

2 个答案:

答案 0 :(得分:25)

正如他们所说here,这不是一个错误,它是一个特征:在循环中定义的变量作用于该循环。

但不要担心,您可以在循环外定义var并将其分配到内部,如下所示:

{% set driverid = '' %} {# <-- add this line: default empty value #}

{% for driver in assigned.driver %}
     ...
     {% set driverid = driver.driver.id %}

这应该足以让它发挥作用。

答案 1 :(得分:3)

如果assigned.driver为空,则永远不会执行for循环,因此不会定义变量。您需要做的是在循环外部初始化此变量:{% set driverid = null %}