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.







twig