Skip to content

Commit 54db3a1

Browse files
committed
Container::setValues() and setDefaults() accepts array|Traversable|stdClass (BC break)
1 parent 558ed89 commit 54db3a1

File tree

2 files changed

+11
-6
lines changed

2 files changed

+11
-6
lines changed

src/Forms/Container.php

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,21 +46,27 @@ class Container extends Nette\ComponentModel\Container implements \ArrayAccess
4646

4747
/**
4848
* Fill-in with default values.
49+
* @param array|\Traversable|\stdClass $values
4950
*/
50-
public function setDefaults(array|object $data, bool $erase = false): static
51+
public function setDefaults(array|object $values, bool $erase = false): static
5152
{
5253
$form = $this->getForm(false);
53-
$this->setValues($data, $erase, $form?->isAnchored() && $form->isSubmitted());
54+
$this->setValues($values, $erase, $form?->isAnchored() && $form->isSubmitted());
5455
return $this;
5556
}
5657

5758

5859
/**
5960
* Fill-in with values.
61+
* @param array|\Traversable|\stdClass $values
6062
* @internal
6163
*/
6264
public function setValues(array|object $values, bool $erase = false, bool $onlyDisabled = false): static
6365
{
66+
if (is_object($values) && !($values instanceof \Traversable || $values instanceof \stdClass)) {
67+
trigger_error(__METHOD__ . ': argument should be array|Traversable|stdClass, ' . get_debug_type($values) . ' given.');
68+
}
69+
6470
$values = $values instanceof \Traversable
6571
? iterator_to_array($values)
6672
: (array) $values;

tests/Forms/Container.values.mapping.phpt

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,23 +11,22 @@ use Tester\Assert;
1111
require __DIR__ . '/../bootstrap.php';
1212

1313

14-
#[AllowDynamicProperties]
15-
class FormData
14+
class FormData extends stdClass
1615
{
1716
public string $title;
1817
public FormFirstLevel $first;
1918
}
2019

2120

22-
class FormFirstLevel
21+
class FormFirstLevel extends stdClass
2322
{
2423
public string $name;
2524
public ?int $age = null;
2625
public ?FormSecondLevel $second;
2726
}
2827

2928

30-
class FormSecondLevel
29+
class FormSecondLevel extends stdClass
3130
{
3231
public string $city;
3332
}

0 commit comments

Comments
 (0)