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