2014-07-11 2 views
8

Ho alcune variabili nel ramoscello comeSymfony2 - Come accedere i nomi delle variabili dinamiche in ramoscello

placeholder1 
placeholder2 
placeholderx 

chiamarli, sto scorrendo la serie di oggetti "fatture"

{% for invoices as invoice %} 
    need to display here the placeholder followed by the invoice id number 
    {{ placeholedr1 }} 

Qualsiasi idea? Grazie.

+0

dove si definisce segnaposto 1 - x? Sono accessibili a livello globale ogni fattura ha il proprio segnaposto? – KhorneHoly

+0

Li sto definendo nel controler e passando al modello di ramoscello. –

+0

Puoi mostrarmi il codice in cui stai definendo e passandoli? Quindi dovrei essere in grado di aiutarti :) – KhorneHoly

risposta

19

Ho appena avuto lo stesso problema - e l'utilizzo di questa prima risposta, e dopo alcune ricerche supplementari trovato il {{ attribute(_context, 'placeholder'~invoice.id) }} dovrebbe funzionare (_context essere l'oggetto contesto globale che contiene tutti gli oggetti in base al nome)

0

ho trovato la soluzione:

attribute(_context, 'placeholder'~invoice.id) 
2

la mia soluzione per questo problema:

Crea una matrice di segnaposto (x). Come:

# Options 
$placeholders = array(
    'placeholder1' => 'A', 
    'placeholder2' => 'B', 
    'placeholder3' => 'C', 
); 

# Send to View ID invoice 
$id_placeholder = 2; 

Invia entrambe le variabili per la vista e nella chiamata modello:

{{ placeholders["placeholder" ~ id_placeholder ] }} 

Questa stampa "B".

Spero che questo ti aiuti.

2

Invece di usare il attribute function, è possibile accedere ai valori dell'array _context con la normale notazione staffa così:

{{ _context['placeholder' ~ id] }} 

Io personalmente utilizzare questo come è più conciso e, a mio parere più chiara.

Se il environment optionstrict_variables è impostato su true, si dovrebbe anche utilizzare il filtro default:

{{ _context['placeholder' ~ id]|default }} 

{{ attribute(_context, 'placeholder' ~ id)|default }} 

altrimenti otterrete un'eccezione Twig_Error_Runtime se la variabile non esiste. Ad esempio, se si hanno variabili foo e bar ma si tenta di emettere la variabile baz (che non esiste), si ottiene tale eccezione con il messaggio Key "baz" for array with keys "foo, bar" does not exist.

Un modo più dettagliato per verificare l'esistenza di una variabile è quello di utilizzare il defined test:

{% if _context['placeholder' ~ id] is defined %} ... {% endif %} 

Con il filtro default si può anche fornire un valore predefinito, ad esempio, null o una stringa:

{{ _context['placeholder' ~ id]|default(null) }} 

{{ attribute(_context, 'placeholder' ~ id)|default('Default value') }} 

Se si omette il valore predefinito (cioè si utilizza invece di |default|default(somevalue)), il valore predefinito sarà una stringa vuota.

strict_variables è false per impostazione predefinita, ma preferisco impostarlo su true per evitare problemi accidentali causati da ad es. errori di battitura.

+0

accedervi in ​​questo modo ha senso e imo è più leggibile. Grazie – billynoah