From 084be27d77f513b6ae1314f073c0993eecdd63d0 Mon Sep 17 00:00:00 2001 From: Fabien Potencier Date: Fri, 10 May 2019 08:33:19 +0200 Subject: [PATCH] fixed support for IteratorAggregate in the filter filter --- src/Extension/CoreExtension.php | 4 ++++ test/Twig/Tests/Fixtures/filters/filter.test | 12 +++++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/Extension/CoreExtension.php b/src/Extension/CoreExtension.php index 700f13bd9..f0c9fa0b6 100644 --- a/src/Extension/CoreExtension.php +++ b/src/Extension/CoreExtension.php @@ -1696,6 +1696,10 @@ function twig_array_filter($array, $arrow) return array_filter($array, $arrow); } + while ($array instanceof \IteratorAggregate) { + $array = $array->getIterator(); + } + return new \CallbackFilterIterator($array, $arrow); } diff --git a/test/Twig/Tests/Fixtures/filters/filter.test b/test/Twig/Tests/Fixtures/filters/filter.test index 1d6a96be2..faaa5e084 100644 --- a/test/Twig/Tests/Fixtures/filters/filter.test +++ b/test/Twig/Tests/Fixtures/filters/filter.test @@ -18,8 +18,15 @@ {% for k, v in it|filter((v) => v > offset) -%} {{ k }} = {{ v }} {% endfor %} + +{% for k, v in ita|filter(v => v > offset) -%} + {{ k }} = {{ v }} +{% endfor %} --DATA-- -return ['it' => new \ArrayIterator(['a' => 1, 'b' => 2, 'c' => 5, 'd' => 8])] +return [ + 'it' => new \ArrayIterator(['a' => 1, 'b' => 2, 'c' => 5, 'd' => 8]), + 'ita' => new IteratorAggregateStub(['a' => 1, 'b' => 2, 'c' => 5, 'd' => 8]), +] --EXPECT-- 1 = 5 3 = 4 @@ -34,3 +41,6 @@ d = 8 c = 5 d = 8 + +c = 5 +d = 8