Est-il possible de vérifier si la variable donnée est une chaîne dans Twig
?
Solution attendue:
messages.en.yml
:
hello:
stranger: Hello stranger !
known: Hello %name% !
Twig
modèle:
{% set title='hello.stranger' %}
{% set title=['hello.known',{'%name%' : 'hsz'}] %}
{% if title is string %}
{{ title|trans }}
{% else %}
{{ title[0]|trans(title[1]) }}
{% endif %}
Est-il possible de procéder de cette façon? Ou peut-être avez-vous une meilleure solution?
Peut être fait avec le test iterable
, ajouté dans twig1.7, comme Wouter J l'a déclaré dans le commentaire:
{# evaluates to true if the foo variable is iterable #}
{% if users is iterable %}
{% for user in users %}
Hello {{ user }}!
{% endfor %}
{% else %}
{# users is probably a string #}
Hello {{ users }}!
{% endif %}
Référence: itérable
Ok, je l'ai fait avec:
{% if title[0] is not defined %}
{{ title|trans }}
{% else %}
{{ title[0]|trans(title[1]) }}
{% endif %}
Laid, mais ça marche.
J'ai trouvé que iterable
n'était pas assez bon car d'autres objets peuvent également être itérables, et sont clairement différents d'un array
.
Par conséquent, l'ajout d'un nouveau Twig_SimpleTest
pour vérifier si un élément is_array
est beaucoup plus explicite. Vous pouvez l'ajouter à la configuration de votre application/après twig is bootstrapped.
$isArray= new Twig_SimpleTest('array', function ($value) {
return is_array($value);
});
$twig->addTest($isArray);
L'utilisation devient très propre:
{% if value is array %}
<!-- handle array -->
{% else %}
<!-- handle non-array -->
{% endif % }