Skip to content

Commit d1eb1b2

Browse files
committed
$onClick handlers are called until form is valid (BC break)
1 parent 4e83559 commit d1eb1b2

File tree

2 files changed

+37
-1
lines changed

2 files changed

+37
-1
lines changed

src/Forms/Form.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -434,7 +434,7 @@ private function invokeHandlers(iterable $handlers, $button = NULL): void
434434
$params = Nette\Utils\Callback::toReflection($handler)->getParameters();
435435
$values = isset($params[1]) ? $this->getValues($params[1]->isArray()) : NULL;
436436
Nette\Utils\Callback::invoke($handler, $button ?: $this, $values);
437-
if (!$button && !$this->isValid()) {
437+
if (!$this->isValid()) {
438438
return;
439439
}
440440
}

tests/Forms/Forms.onClick.phpt

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,42 @@ test(function () { // valid
3939
});
4040

4141

42+
test(function () { // valid -> invalid
43+
$_SERVER['REQUEST_METHOD'] = 'POST';
44+
$_POST = ['btn' => ''];
45+
46+
$called = [];
47+
$form = new Form;
48+
$form->addText('name');
49+
$button = $form->addSubmit('btn');
50+
51+
$button->onClick[] = function (SubmitButton $button) use (&$called) {
52+
$called[] = 'click1';
53+
};
54+
$button->onClick[] = function (SubmitButton $button) use (&$called) {
55+
$called[] = 'click2';
56+
$button->getForm()->addError('error');
57+
};
58+
$button->onClick[] = function (SubmitButton $button) use (&$called) {
59+
$called[] = 'click3';
60+
};
61+
$button->onInvalidClick[] = function (SubmitButton $button) use (&$called) {
62+
$called[] = 'invalidClick';
63+
};
64+
$form->onSuccess[] = function (Form $form) use (&$called) {
65+
$called[] = 'success';
66+
};
67+
$form->onError[] = function (Form $form) use (&$called) {
68+
$called[] = 'error';
69+
};
70+
$form->onSubmit[] = function (Form $form) use (&$called) {
71+
$called[] = 'submit';
72+
};
73+
$form->fireEvents();
74+
Assert::same(['click1', 'click2', 'error', 'submit'], $called);
75+
});
76+
77+
4278
test(function () { // invalid
4379
$_SERVER['REQUEST_METHOD'] = 'POST';
4480
$_POST = ['btn' => ''];

0 commit comments

Comments
 (0)