2016-08-26 2 views
2

У меня около 5 или около того таблиц, которые являются булевыми. Я хочу проверить их все, и если один или несколько вернутся, то сделайте что-нибудь.Twig проверить несколько значений

До сих пор я пытался что-то вроде

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

Но если кто-нибудь из них возвращает истину, то он будет говорить

Has Colors 

независимо от количества раз она возвращает истину. Есть ли способ проверить все из них, и если еще один возвращает true, возвращается «Имеет цвета»?

+1

Почему бы просто не добавить дополнительный метод на вашей модели? Что делает те же проверки. Таким образом, у вас есть хорошая семантика в вашем представлении, которая не нуждается в обновлении при добавлении цвета. – Yoshi

+0

@ Yoshi, я думаю, что методы модели не должны использоваться для этой простой работы. –

+1

@VishalKumarSahu Я категорически не согласен. Модель - это место для * простых * решений. Полагая это решение в своем взгляде, он становится совершенно недостижимым. Если вам это нужно в другом представлении или в коде, вам придется снова написать точно такую ​​же логику. Это просто ужас. – Yoshi

ответ

2

Вам необходимо работать с flag в twig, чтобы отслеживать, если указаны один или несколько цветов. Более короткий пример кода будет (должен также работать с объектом 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

+1

Хотя ваше решение совершенно жизнеспособно, я все равно буду голосовать за другой подход: просто реализуйте 'hasColor()' как функцию для объекта продукта. –

+0

Это очень верно – DarkBee

+0

Эмоциональный подход Emanuel PHP не дружит с веточкой. –

-1

Копаем глубже в Twig, я хотел бы сделать, как это ...

{% set has_color = false %} 
{% for color in product if color is true %} 
    {% set has_color = true %} 
{% endfor %} 

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

Любой, кто делает отрицательный голос, должен сообщить причину. Aweful. –

Смежные вопросы