setValidationScope([]) na submitu zabrání odeslání $values do onSuccess metody

Michal Kumžák
Člen | 106
+
0
-

Zdravím

Udělal sem si update balíčků na poslední verzi (Nette/forms v3.1.4) a při konstrukci

$form->addSubmit('filtrovat', 'Filtrovat')->setValidationScope([]);

se mi přestali odesílat data do metody definované v onSuccess. Přicházel mi tam jen prázdný object \Nette\Utils\ArrayHash. Po smazání setValidationScope, se data opět začali odesílat. Je to záměr nebo je to chyba?

Michal

Michal Kumžák
Člen | 106
+
0
-

David Grudl napsal(a):

https://blog.nette.org/…te-forms-3-1

Super, to mi vysvětluje ten setValidationScope. Jenže když ho tam nedám, tak se mi na onSuccess nic nezavolá, ikdyž ve formuláři nic nekontroluji a bdump($form->getErrors()) hlásí, že je prázdný.

David Grudl
Nette Core | 8239
+
0
-

To je divný, můžeš vytvořit co nejjednodušší demo problému?

Michal Kumžák
Člen | 106
+
0
-

David Grudl napsal(a):

To je divný, můžeš vytvořit co nejjednodušší demo problému?

Tak problém odhalen. Musel jsem upravit definovaní některých polí pro addSelect.

Místo této definice

['', 1, 2, 3, 4]

jsem musel uvést tuto

[''=>'', 1=>1, 2=>2, 3=>3, 4=>4]

a pak už to začlo procházet.

Editoval Michal Kumžák (31. 8. 2021 19:00)

David Grudl
Nette Core | 8239
+
0
-

Chování, které jsi popsal, by nemělo nastat ani s první definicí. Jak vypadá kód toho selectu?

Michal Kumžák
Člen | 106
+
+1
-

David Grudl napsal(a):

Chování, které jsi popsal, by nemělo nastat ani s první definicí. Jak vypadá kód toho selectu?

Původní, kdy to nehlásilo chybu ale ani nevolalo onSuccess

$form->addSelect('pocet_osob', 'Počet osob na pokoji:', ['', 1, 2, 3, 4])
					->setHtmlAttribute('title', 'Vyberte počet osob');

Po úpravě, kdy to pak začalo volat onSuccess

$form->addSelect('pocet_osob', 'Počet osob na pokoji:', [''=>'', 1=>1, 2=>2, 3=>3, 4=>4])
					->setHtmlAttribute('title', 'Vyberte počet osob');

Edit: Hmmm, ale když to zkusím nasimulovat jen s tímto selectem, tak to jde. Jdu zkusit pátrat dál.

Edit2: Takže původce problému odhalen, je to bootstrap4. Když vyzkoušíš odeslat ten form bez prvedení výběru, tak to neprojde, protože to odešle prázdnou hodnotu, ale automaticky generovaný klíč toho prvního pole je 0.

Editoval Michal Kumžák (2. 9. 2021 13:25)