formulář nereaguje na Onsucceeded
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- Johnczek
- Člen | 37
Zdravím, ručně vykresluji formulář, v presenteru mám jen toto
public function createComponentAdd() {
$form = new UI\Form;
$form->addProtection('Vypršel časový limit, odešlete formulář znovu');
$form->addUpload('image_url')
->setRequired(false)
->addRule(Form::IMAGE, 'Povolené formáty jsou PNG, JPEG a GIF')
->addRule(Form::MAX_FILE_SIZE, 'Maximální velikost obrázku je 6 MB.', 6000 * 1024);
$form->onSuccess[] = [$this, 'addSucceeded'];
dump($form);
return $form;
}
Onsucc metoda pak vypadá takto
public function addSucceeded(UI\Form $form, $values) {
$data = $form->getHttpData();
$values = $form->getValues();
$this->redirect('Homepage:');
dump($data);
die();
bla bla bla
Formulář vykresluji klasicky jako
{form add}
bla bla
submit button
{/form}
Formulář se vytvoří, vše je vpořádku, v jeho dumpu lze vidět
Nette\Application\UI\Form #da56
onAnchor => null
onSuccess => array (1)
0 => array (1)
0 => App\AdminModule\Presenters\ProductsPresenter #90f5 { ... }
Takže se asi na něco navazuje (nebo ne)?
Ale když formulář submitem odešlu, nic se nestane. Neproběhne redirect na
homepage ani die. (zkušel jsem dat debugovací věci i hned na začátek
insucc metody ale skončilo to stejně). Jediné co formulář udělá je, že
redirectne stránku.
Mohl by mi někdo poradit?
A ještě taková menší otázka k tomu: Lze nějak validovat inputy ručně vykresleného formuláře tak, jako bych to dělal přes metodu v presenteru?
- duke
- Člen | 650
Nejspíš formulář není validní a tak se addSucceeded vůbec nevolá.
Zjisti, co je ve $form->getErrors().
Např. takto:
public function createComponentAdd()
{
// ...
$form->onError[] = array($this, 'flashFormErrors');
// ...
return $form;
}
public function flashFormErrors(Nette\Forms\Form $form)
{
foreach ($form->getErrors() as $error) {
$this->flashMessage($error, 'error');
}
if ($this->isAjax()) {
$this->redrawControl('flashes');
}
}