Skip to content

Commit ba33f20

Browse files
committed
HiddenField: value is not converted to string [Closes #152]
1 parent 4bdcb15 commit ba33f20

File tree

3 files changed

+28
-5
lines changed

3 files changed

+28
-5
lines changed

src/Forms/Controls/HiddenField.php

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,11 +41,13 @@ public function __construct($persistentValue = null)
4141
*/
4242
public function setValue($value)
4343
{
44-
if (!is_scalar($value) && $value !== null && !method_exists($value, '__toString')) {
44+
if ($value === null) {
45+
$value = '';
46+
} elseif (!is_scalar($value) && !method_exists($value, '__toString')) {
4547
throw new Nette\InvalidArgumentException(sprintf("Value must be scalar or null, %s given in field '%s'.", gettype($value), $this->name));
4648
}
4749
if (!$this->persistValue) {
48-
$this->value = (string) $value;
50+
$this->value = $value;
4951
}
5052
return $this;
5153
}
@@ -61,7 +63,7 @@ public function getControl(): Nette\Utils\Html
6163
return $el->addAttributes([
6264
'name' => $this->getHtmlName(),
6365
'disabled' => $this->isDisabled(),
64-
'value' => $this->value,
66+
'value' => (string) $this->value,
6567
]);
6668
}
6769

tests/Forms/Controls.HiddenField.loadData.phpt

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,9 +68,21 @@ test(function () { // setValue() and invalid argument
6868
test(function () { // object
6969
$form = new Form;
7070
$input = $form->addHidden('hidden')
71-
->setValue(new Nette\Utils\DateTime('2013-07-05'));
71+
->setValue($data = new Nette\Utils\DateTime('2013-07-05'));
7272

73-
Assert::same('2013-07-05 00:00:00', $input->getValue());
73+
Assert::same($data, $input->getValue());
74+
});
75+
76+
77+
test(function () { // int from string
78+
$_POST = ['text' => '10'];
79+
$form = new Form;
80+
$input = $form->addHidden('text');
81+
$input->addRule($form::INTEGER);
82+
83+
Assert::same('10', $input->getValue());
84+
$input->validate();
85+
Assert::equal(10, $input->getValue());
7486
});
7587

7688

tests/Forms/Controls.HiddenField.render.phpt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,3 +69,12 @@ test(function () { // rendering options
6969
$input->getControl();
7070
Assert::true($input->getOption('rendered'));
7171
});
72+
73+
74+
test(function () { // object
75+
$form = new Form;
76+
$input = $form->addHidden('hidden')
77+
->setValue(new Nette\Utils\DateTime('2013-07-05'));
78+
79+
Assert::same('<input type="hidden" name="hidden" value="2013-07-05 00:00:00">', (string) $input->getControl());
80+
});

0 commit comments

Comments
 (0)