symfony - template - twig moda
Come verificare se esiste un blocco in un modello di ramoscello-Symfony2 (4)
Le altre risposte qui non funzionano per twig 2.1 (non ho testato su ~ 2.0), quindi ecco un piccolo aggiornamento:
{% if block('dynamic') is defined %}
{{ block('dynamic')|raw }}
{% endif %}
Si noti che la linea per il rendering del blocco non è:
{% block dynamic %}
{# this wont work #}
{% endblock %}
Questo non funzionerà perché il blocco verrà renderizzato durante la compilazione, e così il test restituirà true che esiste (come testato in fase di runtime). Quindi è necessario rendere il blocco con {{ block('dynamic')|raw }}
invece che questo in realtà non definisce il blocco nel template.
Immagina di avere qualcosa di simile nel mio modello di ramoscello
{% block posLeft %}
-----
{%endblock%}
C'è un modo per verificare l'esistenza del blocco posLeft senza chiamare a:
block("posLeft")
E controlla il valore di ritorno di posBlock per chiarire l'esistenza. Sono un principiante in Symfony2 + Twig.
Primo controllo, quale versione di Twig stai usando all'interno del tuo progetto symfony, perché le risposte qui sono solo per Twig 1.
Se stai usando Twig 2 sei fortunato. In base alla documentazione di Twig, è possibile utilizzare il test definito per verificare se il blocco esiste nel contesto del modello corrente.
{% if block("dynamic") is defined %}
...
{% endif %}
Ho scritto un po 'TwigExtension per verificare se il blocco viene chiamato all'interno dell'istruzione if e sembra che Twig riesca solo a verificare se il blocco esiste e non lo chiama.
Il link ai documenti: http://twig.sensiolabs.org/doc/2.x/functions/block.html
Se stai utilizzando Twig 1 , la vecchia risposta all'indirizzo https://.com/a/13806784/6458657 è ancora corretta.
Puoi risolverlo in questo modo, se vuoi visualizzare un determinato blocco solo se ha contenuto. Spero, questo è quello che stai cercando.
Esempio index.html.twig
{% set _block = block('dynamic') %}
{% if _block is not empty %}
{{ _block|raw }}
{% endif %}
Esempio part.html.twig
{% extends "index.html.twig" %}
{% block dynamic %}
Block content goes here.
{% endblock %}
Twig 2.x
{{ (block("posLeft")) ?? '' }}
Se vuoi visualizzare un blocco se è definito o meno in una riga. Potrebbe essere un po 'scontroso, ma soddisfa i miei bisogni senza un sacco di se ... questa logica.