在树枝三元

时间:2017-12-09 19:37:17

标签: php twig

在下面的脚本中考虑{{ item.nw is defined and item.nw ? ' target="_blank"' }}。有没有更简洁的方法来做到这一点?

我认为{{ item.nw ?? ' target="_blank"' }}可能会有效,但如果item.nw不是item.nw则会返回false而如果target="_blank"'item.nw则返回false }(参考https://twig.symfony.com/doc/2.x/templates.html#test-operator

{% macro menu(menu,active) %}
{# menu is an associated array of containing:
name.  required
path or id: One of the two are required.  If both, URL will use path
path.  optional and defaults to javascript:void(0)
id.  optional and defaults to not adding an id to the item.
nw.  optional and defalts to false.  This is a flag for a new window.
class.  optional and defaults to not adding an class to the item.
#}
{% for item in menu %}
{% set path = item.path is defined?item.path:"javascript:void(0)" %}
{% set id = item.id is defined?item.id:null %}
{% set class = item.class is defined?item.class:"" %}
{% if (path == active or id == active) %}
{% set class = class~' active ' %}
{% endif%}
{% if loop.first %}
{% set class = class~' first ' %}
{% elseif loop.last %}
{% set class = class~' last ' %}
{% endif %}
<li class="{{ class|trim }}">
    <a href="{{ path }}"{{ item.nw is defined and item.nw ? ' target="_blank"' }}{{ id?"id=#{id}" }}>{{item.name}}</a>
</li>
{% endfor %}
{% endmacro %}

1 个答案:

答案 0 :(得分:3)

Null coalesce只返回左边的值,如果&#34;它被定义而不是null&#34;。请记住,false也是一个值。

{{ item.nw ?? ' target="_blank"' }}

当&#34;严格模式&#34;如果已打开,则应检查在Twig模板中使用的每个变量。它可能很冗长,但比模板中断更好。

如果使用默认过滤器,还有其他方法可以检查变量。 https://twig.symfony.com/doc/2.x/filters/default.html

{{ item.nw|default() is not false ? ' target="_blank"' }}

{{ item.nw|default() == 'some_value' ? ' target="_blank"' }}