2016-08-26 5 views
2

私は約5か所のブーリアンを持っています。私はそれらのすべてをテストしたいと思っています。複数の値を調べる小枝

は、これまでのところ私は

{% 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を返した場合、それはそれはtrueを返します

Has Colors 

何倍の量と言うだろう。それらのすべてをチェックする方法はありますか?もう1つが真であれば "色あり"を返しますか?

+1

あなたのモデルに余分なメソッドを追加するだけではどうですか?同じチェックをします。この方法では、色を追加したときに更新する必要がない、ビュー内に優れたセマンティクスがあります。 – Yoshi

+0

@ Yoshi、私はこの単純な仕事のためにモデルメソッドを悪用すべきではないと思います。 –

+1

@VishalKumarSahu私は全面的に反対します。モデルはまさにシンプルな決定の場です。その決定をビューに入れておくと、完全に再利用できなくなります。別のビューやコードで必要な場合は、まったく同じロジックを再度記述する必要があります。それはちょうどひどいです。 – Yoshi

答えて

2

flagtwigに設定すると、1つ以上の色が指定されているかどうかを確認できます。コードの短い例は以下のようになり(また、オブジェクト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

エマニュエルPHPのフリークのアプローチは、親株ではないです。 –

-1

が、私はこのように行うだろう

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

否定的な投票をしている人は理由を教えてください。恐ろしい。 –