Skip to content

Commit 49770ec

Browse files
committed
port change forward
1 parent d217a20 commit 49770ec

File tree

2 files changed

+30
-1
lines changed

2 files changed

+30
-1
lines changed

Diff for: src/Illuminate/View/Concerns/ManagesLoops.php

+8-1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
namespace Illuminate\View\Concerns;
44

55
use Countable;
6+
use Traversable;
67
use Illuminate\Support\Arr;
78

89
trait ManagesLoops
@@ -22,7 +23,13 @@ trait ManagesLoops
2223
*/
2324
public function addLoop($data)
2425
{
25-
$length = is_array($data) || $data instanceof Countable ? count($data) : null;
26+
$length = null;
27+
28+
if (is_array($data) || $data instanceof Countable) {
29+
$length = count($data);
30+
} elseif ($data instanceof Traversable) {
31+
$length = iterator_count($data);
32+
}
2633

2734
$parent = Arr::last($this->loopsStack);
2835

Diff for: tests/View/ViewFactoryTest.php

+22
Original file line numberDiff line numberDiff line change
@@ -555,6 +555,28 @@ public function testAddingLoops()
555555
$this->assertEquals([$expectedLoop], $factory->getLoopStack());
556556
}
557557

558+
public function testAddingTraversableLoop()
559+
{
560+
$factory = $this->getFactory();
561+
562+
$data = new \DatePeriod(\Carbon\Carbon::today(), \Carbon\CarbonInterval::day(), \Carbon\Carbon::tomorrow()->endOfDay());
563+
564+
$factory->addLoop($data);
565+
566+
$expectedLoop = [
567+
'iteration' => 0,
568+
'index' => 0,
569+
'remaining' => 2,
570+
'count' => 2,
571+
'first' => true,
572+
'last' => false,
573+
'depth' => 1,
574+
'parent' => null,
575+
];
576+
577+
$this->assertEquals([$expectedLoop], $factory->getLoopStack());
578+
}
579+
558580
public function testAddingUncountableLoop()
559581
{
560582
$factory = $this->getFactory();

0 commit comments

Comments
 (0)