2014-07-15 10 views
8

Sto provando a definire driverid, utilizzando set, come un var nel ciclo for driver in assigned.driver per l'utilizzo successivo. Vedi sotto quello che sto facendo:Twig: imposta una variabile all'interno di un loop, usala al di fuori del ciclo

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

Ma ottengo questo errore:

Variable "driverid" does not exist in /var/www/html/src/Device/DeviceBundle/Resources/views/List/listDevices.html.twig at line 74

Qual è il modo giusto per impostare che var da utilizzare in seguito openAlert() chiamata? O in altre parole, come ottengo il driver.driver.id per passarlo come parametro alla funzione openAlert()?

risposta

19

Come si dice here, questo non è un bug, è una caratteristica: le variabili definite all'interno di un ciclo sono circoscritte a quel ciclo.

Ma non preoccupatevi, è possibile definire la var di fuori del ciclo e assegnare dentro, in questo modo:

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

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

questo dovrebbe essere sufficiente per farlo funzionare.

+0

Perfetto. Grazie :) – Zl3n

3

Se assigned.driver è vuoto, il ciclo for non viene mai eseguito, quindi la variabile non verrà definita. Quello che devi fare è inizializzare questa variabile al di fuori del ciclo: {% set driverid = null %}

Problemi correlati