webentwicklung-frage-antwort-db.com.de

Überprüfen Sie in Twig

Kann in Twig überprüft werden, ob die angegebene Variable ein String ist?

Erwartete Lösung:

messages.en.yml:

hello:
  stranger: Hello stranger !
  known: Hello %name% !

Twig Vorlage:

{% set title='hello.stranger' %}
{% set title=['hello.known',{'%name%' : 'hsz'}] %}

{% if title is string %}
  {{ title|trans }}
{% else %}
  {{ title[0]|trans(title[1]) }}
{% endif %}

Kann man das so machen? Oder haben Sie vielleicht eine bessere Lösung?

44
hsz

Kann mit dem in twig1.7 hinzugefügten Test iterable durchgeführt werden, wie Wouter J im Kommentar angegeben hat:

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

Referenz: iterabel

115
DarkBee

Ok, ich habe es gemacht mit:

{% if title[0] is not defined %}
    {{ title|trans }}
{% else %}
    {{ title[0]|trans(title[1]) }}
{% endif %}

Hässlich, funktioniert aber.

9
hsz

Ich fand iterable nicht gut genug, da andere Objekte auch iterabel sein können und sich deutlich von einem array unterscheiden.

Fügen Sie daher ein neues Twig_SimpleTest um zu prüfen, ob ein Gegenstand is_array ist viel expliziter. Sie können dies zu Ihrer App-Konfiguration hinzufügen/nachdem twig bootstrapped ist.

$isArray= new Twig_SimpleTest('array', function ($value) {
    return is_array($value);
});
$twig->addTest($isArray);

Die Verwendung wird sehr sauber:

{% if value is array %}
    <!-- handle array -->
{% else %}
    <!-- handle non-array -->
{% endif % }
8