我已经有了解决方案,但仅限于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。
答案 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条件。