【问题标题】:Twig: set a variable inside a loop, use it outside that loopTwig:在循环内设置一个变量,在循环外使用它
【发布时间】:2014-09-05 16:02:11
【问题描述】:

我正在尝试使用setdriverid 定义为for driver in assigned.driver 循环中的变量,以供以后使用。看看下面我在做什么:

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

但我收到此错误:

变量“driverid”不存在于 /var/www/html/src/Device/DeviceBundle/Resources/views/List/listDevices.html.twig 在第 74 行

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

【问题讨论】:

    标签: php symfony twig symfony-2.4


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      正如他们所说的here,这不是一个错误,而是一个特性:在循环内定义的变量的作用域是该循环。

      不过别担心,你可以在循环外定义 var 并在里面赋值,像这样:

      {% set driverid = '' %} {# <-- add this line: default empty value #}
      
      {% for driver in assigned.driver %}
           ...
           {% set driverid = driver.driver.id %}
      

      这应该足以让它工作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-11-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-03
        • 2016-05-06
        相关资源
        最近更新 更多