Twig:while-workaround

时间:2015-02-19 11:12:04

标签: twig twig-extension

我已经有了解决方案,但仅限于JavaScript。不幸的是,Twig中不存在while循环。

我在JavaScript中的Twig-target:

var x = 10; // this is an unknown number
var result = x;
while (100 % result !== 0) {
   result++;
}
console.log(result);

我是如何在Twig中做到这一点的?

我的目标是什么:(如果您已经理解,则不重要)

我希望得到我的未知号码后的第一个数字,满足以下条件:

100除以(第一个数字)等于整数。

编辑:我无法访问PHP或Twig-core。

2 个答案:

答案 0 :(得分:3)

您可以制作如下的Twig扩展程序:

namespace Acme\DemoBundle\Twig\Extension;

class NumberExtension extends \Twig_Extension
{


    public function nextNumber($x)
    {
        $result = $x;
        while (100 % $result !== 0) {
            $result++;
        }
        return $result;
    }

    public function getFunctions()
    {
        return array(
            'nextNumber' => new \Twig_Function_Method($this, 'nextNumber'),
        );
    }


    /**
     * Returns the name of the extension.
     *
     * @return string The extension name
     */
    public function getName()
    {
        return 'demo_number';
    }
}

并在bundle的service.xml中定义它:

<service id="twig.extension.acme.demo" class="Acme\DemoBundle\Twig\Extension\NumberExtension" >
    <tag name="twig.extension" />
</service>

然后在模板中使用它:

{{ nextNumber(10) }}

<强>更新

一种(不太好)的方法,但可能满足您的需要是做这样的事情:

{%  set number = 10  %}
{%  set max = number+10000  %}  {# if you can define a limit #}
{% set result = -1 %}
    {% for i in number..max %}
        {% if 100 % i == 0 and result < 0 %} {# the exit condition #}
            {% set result  = i %}
            {% endif %}
    {% endfor %}

<h1>{{ result }}</h1>

希望这个帮助

答案 1 :(得分:0)

在我的情况下 - 我不得不输出一个具有类似子对象的对象 - 包括具有预定义值的模板,并设置正常的if条件。

有关更多信息,请参阅http://twig.sensiolabs.org/doc/tags/include.html