2

私はすでに解決策を持っていますが、JavaScript だけです。残念ながら、Twig には while ループは存在しません。

JavaScript での私の Twig ターゲット:

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

Twigでこれを行う方法はありますか?

What's my target: (すでに理解している場合は重要ではありません)

次の条件を満たす、不明な番号の後の最初の番号を取得したい:

100 を (最初の数) で割ると、結果として整数に等しくなります。

編集: PHP にも Twig-core にもアクセスできません。

4

2 に答える 2

3

You can make a Twig extension like:

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';
    }
}

And define it in the service.xml of the bundle:

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

Then use it in the template:

{{ nextNumber(10) }}

UPDATE

A (not so great) approach but that possibly satisfy your needed is to do something like this:

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

Hope this help

于 2015-02-19T11:32:09.603 に答える
0

私の場合、同様のサブオブジェクトを持つオブジェクトを出力する必要がありました.定義済みの値を持つテンプレートを含み、通常のif条件が機能しました。

詳細については、 http: //twig.sensiolabs.org/doc/tags/include.html を参照してください。

于 2016-05-30T22:58:19.420 に答える