简体   繁体   English

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

[英]Twig: set a variable inside a loop, use it outside that loop

I'm trying to define driverid , using set , as a var in for driver in assigned.driver cycle for use later. 我正在尝试使用set定义driverid作为driverid循环中for driver in assigned.driver的var, for driver in assigned.driver稍后使用。 See below what I'm doing: 看下面我在做什么:

{% 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 %}

But I get this error: 但我得到这个错误:

Variable "driverid" does not exist in /var/www/html/src/Device/DeviceBundle/Resources/views/List/listDevices.html.twig at line 74 第74行/var/www/html/src/Device/DeviceBundle/Resources/views/List/listDevices.html.twig中不存在变量“driverid”

What's the right way to set that var to use later on openAlert() call? 将该var设置为稍后在openAlert()调用中使用的正确方法是什么? Or in others words how I get the driver.driver.id to pass it as a parameter to openAlert() function? 或者换句话说,我如何让driver.driver.id将它作为参数传递给openAlert()函数?

As they say here , this is not a bug, it's a feature: variables defined inside a loop are scoped to that loop. 正如他们在这里所说,这不是一个错误,它是一个特征:在循环中定义的变量作用于该循环。

But don't worry, you can define the var outside the loop and assign it inside, like this: 但不要担心,您可以在循环外定义var并将其分配到内部,如下所示:

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

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

this should be enough to make it work. 这应该足以让它发挥作用。

If assigned.driver is empty, then the for loop is never executed so the variable won't be defined. 如果assigned.driver为空,则永远不会执行for循环,因此不会定义变量。 What you need to do is to initialize this variable outside of the loop: {% set driverid = null %} 你需要做的是在循环之外初始化这个变量: {% set driverid = null %}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM