diff --git a/src/Forms/Container.php b/src/Forms/Container.php index 2014c6f8..f29feb85 100644 --- a/src/Forms/Container.php +++ b/src/Forms/Container.php @@ -301,11 +301,12 @@ public function addComponent( /** - * Iterates over all form controls. + * Retrieves the entire hierarchy of form controls including nested. + * @return list */ - public function getControls(): \Iterator + public function getControls(): array { - return $this->getComponents(true, Control::class); + return array_values(array_filter($this->getComponentTree(), fn($c) => $c instanceof Control)); } diff --git a/tests/Forms/Container.getControls().phpt b/tests/Forms/Container.getControls().phpt index 5c4d2bef..3c605a6e 100644 --- a/tests/Forms/Container.getControls().phpt +++ b/tests/Forms/Container.getControls().phpt @@ -15,22 +15,4 @@ $form->addContainer('cont') ->addText('name'); $controls = $form->getControls(); - -$names = $values = []; -foreach ($controls as $name => $value) { - $names[] = $name; - $values[] = $value; -} - -Assert::same(['name', 'age', 'name'], $names); -Assert::same([$form['name'], $form['age'], $form['cont-name']], $values); - -// again -$names = $values = []; -foreach ($controls as $name => $value) { - $names[] = $name; - $values[] = $value; -} - -Assert::same(['name', 'age', 'name'], $names); -Assert::same([$form['name'], $form['age'], $form['cont-name']], $values); +Assert::same([$form['name'], $form['age'], $form['cont-name']], $controls);