【问题标题】:Twig check multiple valuesTwig 检查多个值
【发布时间】:2016-08-26 00:33:24
【问题描述】:

我有大约 5 个布尔值表。我想测试所有这些,如果一个或多个返回 true,然后做某事。

到目前为止,我已经尝试过类似的东西

{% if product.is_red == true %}

<h1>Has colors</h1>

{% elseif product.is_yellow == true %}

<h1>Has colors</h1>

{% elseif product.is_green == true %}

<h1>Has colors</h1>

{% elseif product.is_purple == true %}

<h1>Has colors</h1>

{% elseif product.is_black == true %} 


{% endif %}

但是如果他们中的任何一个返回true,那么它会说

Has Colors

无论它返回 true 的次数是多少。有没有办法检查所有这些,如果再有一个返回 true 然后返回“有颜色”?

【问题讨论】:

  • 为什么不在你的模型上添加一个额外的方法呢?哪个做同样的检查。这样您的视图中就有了良好的语义,在添加颜色时不需要更新。
  • @Yoshi,我认为模型方法不应该被用于这个简单的工作。
  • @VishalKumarSahu 我完全不同意。该模型正是简单决策的地方。将该决定放在视图中使其完全不可重用。如果您在另一个视图或代码中需要它,您将不得不再次编写完全相同的逻辑。太可怕了。
  • 肯定不适用于分配工作的组织。 @Yoshi

标签: php templates twig


【解决方案1】:

如果指定了一种或多种颜色,您必须使用twig 中的flag 来跟踪。更简短的代码示例是(也应该使用对象product

{% 
    set product = {
        'is_red'     : false,
        'is_yellow'  : false,
        'is_blue'    : true,
        'is_green'   : false,
    }
%}

{% set has_color = false %}
{% for color in ['red', 'yellow', 'blue', 'green', 'purple', ] %}
   {% if product['is_'~color] is defined and product['is_'~color] %}{% set has_color = true %}{% endif %}
{% endfor %}

{% if has_color %}
<h1>Has color</h1>
{% endif %}

fiddle

【讨论】:

  • 虽然您的解决方案完全可行,但我仍然会投票支持不同的方法:只需将 hasColor() 实现为产品实体的函数即可。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-14
相关资源
最近更新 更多