编程语言
首页 > 编程语言> > php-在树枝三元中定义

php-在树枝三元中定义

作者:互联网

考虑{{item.nw已定义,而item.nw是? ‘target =“ _ blank”’}}在下面的脚本中.有更简洁的方法吗?

我以为{{item.nw? ‘target =“ _ blank”’}}可能有效,但如果item.nw不为false,则返回item.nw;如果item.nw为false,则返回target =“ _ blank”'(参考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 %}

解决方法:

如果“已定义并且不为空”,则空合并将仅返回左侧的值.请记住,false也是一个值.

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

启用“严格模式”时,应检查在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"' }}

标签:twig,php
来源: https://codeday.me/bug/20191110/2014405.html