for循环 - 从1迭代到x

时间:2014-05-15 11:56:33

标签: symfony twig symfony-2.4

我在Twig模板中循环:

{% for item in 1..0 %}
     {{ item }}
{% endfor %}

(当然在现实生活中代替0,有变量值)。我希望在这个例子中循环不会被执行,因为0小于1.但实际上它显示

1 0 

问题:在这个例子中是否有任何方法在Twig(或其他循环)中使用简单的for循环告诉Twig我想迭代++不 - 或者我必须添加条件来检查在循环之前,如果0小于1

修改

当然我知道我可以在PHP中创建数组并在Twig模板中使用它但是这种情况怎么样 - 没有在PHP中创建数组

EDIT2

我希望它可以简单地用于生成星级评分。现在我需要有代码,因为如果检查每个for循环我必须添加额外的代码:

{%  if full_stars_number >= 1 %}
    {%  for item in 1..full_stars_number %}
       <img src="img/full_star.png" />
    {% endfor %}
{% endif %}
{%  if half_stars_number >= 1 %}
    {%  for item in 1..half_stars_number %}
       <img src="img/half_star.png" />
    {% endfor %}
{% endif %}
{%  if empty_stars_number >= 1 %}
    {%  for item in 1..empty_stars_number %}
       <img src="img/empty_star.png" />
    {% endfor %}
{% endif %}

2 个答案:

答案 0 :(得分:1)

1..x生成一个包含值的集合。它可以按升序或降序排序。这是预期的。

我不确定你想要达到什么目标,但你所描述的方式不可能在开箱即用。

您可以编写自己的twig function,它会生成值,或返回一个空数组:

{% set itemsCount = 0 %}
{% for item in my_crazy_function(itemsCount) %}
    {{ item }}
{% endfor %}

编辑:

如果您只想重复一次数值,可以编写一个枝条过滤器:

{{ '<img src="img/empty_star.png" />' | repeat(5) }}

函数实现可以只调用PHP的str_repeat

class Project_Twig_Extension extends Twig_Extension
{
    public function getFilters()
    {
        return array(
            new Twig_SimpleFilter('repeat', 'str_repeat'),
        );
    }

    // ...
}

答案 1 :(得分:1)

试试这个:

{%  for item in 1..full_stars_number if full_stars_number>0 %}
   <img src="img/full_star.png" />
{% endfor %}

{%  for item in 1..half_stars_number if half_stars_number>0 %}
   <img src="img/half_star.png" />
{% endfor %}

{%  for item in 1..empty_stars_number if empty_stars_number>0 %}
   <img src="img/empty_star.png" />
{% endfor %}

这与你在EDIT2中所做的基本相同,但是稍微简洁一些。