formulář nereaguje na Onsucceeded

Johnczek
Člen | 37
+
0
-

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
+
+1
-

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');
		}
	}