Twig for循环以可预测的顺序运行吗?
问题描述:
我在树枝模板中有一个for
循环。Twig for循环以可预测的顺序运行吗?
{% for v in details.variants %}
这里details.variants
是来自一个数据库的数组:
[variants] => Array
(
[0] => Array
(
[Id] => 8711
[Title] => Variant the First
[Code] =>
[Price] => 6989.99
)
[1] => Array
(
[Id] => 8713
[Title] => Variant the Second
[Code] =>
[Price] => 769.99
)
)
出于某种原因,在呈现的HTML,变体的第二次出现,然后再变第一。数据以正确的顺序出现在数据库中,并且传递给Twig的数组是正确的。
这是从一个页面到另一个不一致。有些是正确的顺序;有些不是。但是,每个单独的页面都是一致的:多个刷新显示相同的顺序。 (所有这些页面都使用相同的树枝模板。)我也无法在自己的机器上重现它,它似乎始终显示正确的顺序。
Twig是否尊重提供的数组顺序?数组是否具有字符串或整数键是否有所作用?
答
是,twig
不尊重秩序,因为它只是一个foreach
下
枝杈
{% set variants = [
{'foo':'bar', },
{'foo':'foo', },
] %}
{% for variant in variants %}
{{ variant.foo }}
{% endfor %}
PHP
protected function doDisplay(array $context, array $blocks = array())
{
// line 1
$context["variants"] = array(0 => array("foo" => "bar"), 1 => array("foo" => "foo"));
// line 5
echo "
";
// line 6
$context['_parent'] = $context;
$context['_seq'] = twig_ensure_traversable((isset($context["variants"]) || array_key_exists("variants", $context) ? $context["variants"] : (function() { throw new Twig_Error_Runtime('Variable "variants" does not exist.', 6, $this->getSourceContext()); })()));
foreach ($context['_seq'] as $context["_key"] => $context["variant"]) {
// line 7
echo " ";
echo twig_escape_filter($this->env, twig_get_attribute($this->env, $this->getSourceContext(), $context["variant"], "foo", array()), "html", null, true);
echo "
";
}
$_parent = $context['_parent'];
unset($context['_seq'], $context['_iterated'], $context['_key'], $context['variant'], $context['_parent'], $context['loop']);
$context = array_intersect_key($context, $_parent) + $_parent;
}
你是如何确保'的数据是绝对以正确的顺序从数据库中出来,传递给Twig的e数组是正确的?既然你说你不能在你自己的机器上生产这个,就会引发一些问题。 – Nima