Skip to content

Commit cfca44d

Browse files
mildabredg
authored andcommitted
Container::setDefaults() fixed passing values to disabled elements [Closes #326]
setDefaults(), unlike setDefaultValue(), did not set the value to form element when it was disabled by setDisabled() after the anchor event.
1 parent d4d452f commit cfca44d

File tree

2 files changed

+8
-7
lines changed

2 files changed

+8
-7
lines changed

src/Forms/Container.php

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -49,10 +49,7 @@ class Container extends Nette\ComponentModel\Container implements \ArrayAccess
4949
public function setDefaults(array|object $data, bool $erase = false): static
5050
{
5151
$form = $this->getForm(false);
52-
if (!$form || !$form->isAnchored() || !$form->isSubmitted()) {
53-
$this->setValues($data, $erase);
54-
}
55-
52+
$this->setValues($data, $erase, $form?->isAnchored() && $form->isSubmitted());
5653
return $this;
5754
}
5855

@@ -61,20 +58,20 @@ public function setDefaults(array|object $data, bool $erase = false): static
6158
* Fill-in with values.
6259
* @internal
6360
*/
64-
public function setValues(array|object $values, bool $erase = false): static
61+
public function setValues(array|object $values, bool $erase = false, bool $onlyDisabled = false): static
6562
{
6663
$values = $values instanceof \Traversable
6764
? iterator_to_array($values)
6865
: (array) $values;
6966

7067
foreach ($this->getComponents() as $name => $control) {
7168
if ($control instanceof Control) {
72-
if (array_key_exists($name, $values) || $erase) {
69+
if ((array_key_exists($name, $values) && (!$onlyDisabled || $control->isDisabled())) || $erase) {
7370
$control->setValue($values[$name] ?? null);
7471
}
7572
} elseif ($control instanceof self) {
7673
if (isset($values[$name]) || $erase) {
77-
$control->setValues($values[$name] ?? [], $erase);
74+
$control->setValues($values[$name] ?? [], $erase, $onlyDisabled);
7875
}
7976
}
8077
}

tests/Forms/Controls.BaseControl.phpt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,9 +137,13 @@ test('disabled & submitted', function () {
137137
$form->addText('disabled')
138138
->setDisabled()
139139
->setDefaultValue('default');
140+
$form->addText('disabled2')
141+
->setDisabled();
142+
$form->setDefaults(['disabled2' => 'default']);
140143

141144
Assert::true($form->isSubmitted());
142145
Assert::same('default', $form['disabled']->getValue());
146+
Assert::same('default', $form['disabled2']->getValue());
143147

144148
unset($form['disabled']);
145149
$input = new Nette\Forms\Controls\TextInput;

0 commit comments

Comments
 (0)