Event onSuccess se neprovede pokud prvek není vykreslený
- Lukas99
- Člen | 8
Ahoj,
měl bych dotaz, proč mi při odeslání formuláře nenastane event onSuccess,
když v šabloně nevykreslím prvek select.
Tohle je komponenta pro vytvoření formuláře a výpis kontrolního textu
public function createComponentMyForm(): Form
{
$form = new Form();
$form->addSelect('my_select', '', ['value1' => 'Value1', 'value2' => 'Value2']);
$form->addSubmit('save', 'Save');
$form->onSuccess[] = [$this, 'formSucceeded'];
return $form;
}
public function formSucceeded(Form $form, $data): void
{
bdump('ok');
}
a tohle šablona která ho vykreslí
{block content}
{form myForm}
<select n:name="my_select"></select>
<input n:name="save">
{/form}
Pokud formulář odešlu v tomhle stavu vypíše se text „ok“. Pokud ale z šablony odstraním „<select n:name="my_select“></select>" vůbec se do funkce „formSucceeded“ nedostanu. Zkoušel jsem to i s jinými prvky jako „$form->addText(‚my_input‘)“ ten když v šabloně nevykreslím tak se do funkce „formSucceeded“ dostanu.
Když si v šabloně vypíšu {dump ($form->getErrors())} dostanu ‚Please select a valid option.‘ i když select není povinný.
Děkuji za vysvětlení, a případné rady jak docílit aby nastal event onSuccess i když nebude select vykreslený.
Editoval Lukas99 (12. 4. 2023 21:15)
- m.brecher
- Generous Backer | 873
Ahoj,
Nette formuláře kontrolují zda hodnoty které vrací po submitu formuláře prvek select/radio odpovídají hodnotám, které jsou v prvku zadány, pokud ne, dojde k chybě. Takže když prvek nevykreslíš, tak se nevrací žádná hodnota a i když není prvek required, ve výchozí sadě hodnot pro option položky selectu nemáš prázdný prvek a proto dojde k chybě při validaci. Pokud prázdnou položku do selectu přidáš (setPrompt('')) tak už by měl být formulář validní a odpálí se event success.
Editoval m.brecher (13. 4. 2023 15:53)
- Lukas99
- Člen | 8
m.brecher napsal(a):
Ahoj,
Nette formuláře kontrolují zda hodnoty které vrací po submitu formuláře prvek select/radio odpovídají hodnotám, které jsou v prvku zadány, pokud ne, dojde k chybě. Takže když prvek nevykreslíš, tak se nevrací žádná hodnota a i když není prvek required, ve výchozí sadě hodnot pro option položky selectu nemáš prázdný prvek a proto dojde k chybě při validaci. Pokud prázdnou položku do selectu přidáš (setPrompt('')) tak už by měl být formulář validní a odpálí se event success.
Ahoj,
děkuji za vysvětlení. Funguje přesně jak říkáš.