是否有可能以检查是否给定的变量是字符串中Twig
?
预期的解决方案:
messages.en.yml
:
hello:
stranger: Hello stranger !
known: Hello %name% !
Twig
模板:
{% set title='hello.stranger' %}
{% set title=['hello.known',{'%name%' : 'hsz'}] %}
{% if title is string %}
{{ title|trans }}
{% else %}
{{ title[0]|trans(title[1]) }}
{% endif %}
是否有可能做这种方式? 或者,也许你有更好的解决办法?
可以用测试来完成iterable
,加入twig1.7,如沃特法官在评论中指出:
{# 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 %}
参考: 迭代
好吧,我做它:
{% if title[0] is not defined %}
{{ title|trans }}
{% else %}
{{ title[0]|trans(title[1]) }}
{% endif %}
难看,但作品。
我发现iterable
不足够好,因为其他对象也可以迭代,并且显然比一个不同的array
。
因此添加新Twig_SimpleTest
检查项目is_array
更加明确。 /你可以添加到您的应用程序配置树枝被自举之后。
$isArray= new Twig_SimpleTest('array', function ($value) {
return is_array($value);
});
$twig->addTest($isArray);
用法变得非常干净:
{% if value is array %}
<!-- handle array -->
{% else %}
<!-- handle non-array -->
{% endif % }