Skip to content

Commit

Permalink
Container::setValues() and setDefaults() accepts array|Traversable|st…
Browse files Browse the repository at this point in the history
…dClass (BC break)
  • Loading branch information
dg committed May 19, 2024
1 parent 6c6e824 commit 9f2c3bd
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 6 deletions.
10 changes: 8 additions & 2 deletions src/Forms/Container.php
Original file line number Diff line number Diff line change
Expand Up @@ -45,21 +45,27 @@ class Container extends Nette\ComponentModel\Container implements \ArrayAccess

/**
* Fill-in with default values.
* @param array|\Traversable|\stdClass $values
*/
public function setDefaults(array|object $data, bool $erase = false): static
public function setDefaults(array|object $values, bool $erase = false): static
{
$form = $this->getForm(false);
$this->setValues($data, $erase, $form?->isAnchored() && $form->isSubmitted());
$this->setValues($values, $erase, $form?->isAnchored() && $form->isSubmitted());
return $this;
}


/**
* Fill-in with values.
* @param array|\Traversable|\stdClass $values
* @internal
*/
public function setValues(array|object $values, bool $erase = false, bool $onlyDisabled = false): static
{
if (is_object($values) && !($values instanceof \Traversable || $values instanceof \stdClass)) {
trigger_error(__METHOD__ . ': argument should be array|Traversable|stdClass, ' . get_debug_type($values) . ' given.');
}

$values = $values instanceof \Traversable
? iterator_to_array($values)
: (array) $values;
Expand Down
7 changes: 3 additions & 4 deletions tests/Forms/Container.values.mapping.phpt
Original file line number Diff line number Diff line change
Expand Up @@ -10,16 +10,15 @@ use Tester\Assert;
require __DIR__ . '/../bootstrap.php';


#[AllowDynamicProperties]
class FormData
class FormData extends stdClass
{
public string $title;

public FormFirstLevel $first;
}


class FormFirstLevel
class FormFirstLevel extends stdClass
{
public string $name;

Expand All @@ -29,7 +28,7 @@ class FormFirstLevel
}


class FormSecondLevel
class FormSecondLevel extends stdClass
{
public string $city;
}
Expand Down

0 comments on commit 9f2c3bd

Please sign in to comment.