redirect v metodě zpracování formuláře

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Spectator
Člen | 48
+
0
-

Je mi jasné, že se to tu probílaro nespočetněkrát, ale přesto.
Vytvářím si formulář pomocí továrničky snažím se docílit redirectu po uložení, ale…
Už při načtení stránky a bez odeslání formuláře se mi zobrazí chybová hláška NAbortException a v $response se uloženo
NRedirectResponse(2) ▼ {
url private ⇒ „http://127.0.0.1/website/www/?_fid=hjp1“ (39)
code private ⇒ 302
}

Nemohu se dopídit toho, proč to nefunguje.

	protected function createComponentForm() {
		$form = new NForm;
		$form->addText('jmeno', 'Jméno')
				->addRule(NForm::FILLED, 'Jméno uživatele je povinné!');
		$form->addText('email', 'E-mail')
				->addRule(NForm::FILLED, 'Jméno uživatele je povinné!')
				->addRule(NForm::EMAIL, 'Vyplňte platnouz e-mailovou adresu!');
		$form->addSubmit('create', 'Vytvořit');
		$form->onSuccess[] = callback($this, 'createUser')->invoke($form);
		return $form;
	}

	public function createUser(NForm $form) {
		$this->uzivatel = $this->context->uzivatel;

		if ($this->uzivatel->save($form->values->jmeno, $form->values->email)) {
			$this->flashMessage('uživatel  uložen.', 'success');
		} else {
			$this->flashMessage('uživatel již existuje.', 'error');
		}
		$this->redirect('Homepage:');
	}
Majkl578
Moderator | 1364
+
0
-

To ->invoke($form) tam nemá co dělat. Přidává se callback, ne výsledek jeho volání.

Spectator
Člen | 48
+
0
-

Pokud mám vše stejně bez ->invoke($form), pak se nestane nic a formulář se ani nezpracuje.

Vojtěch Dobeš
Gold Partner | 1316
+
0
-

Spectator Tvůj kód znamená, že ten callback zavoláš vždy při definování formuláře. Pokud se ti bez toho po odeslání nic neděje, ujisti se, že vypisuješ formulářové chyby, pravděpodobně tam nějaká bude, která brání zavolání události onSuccess.

voda
Člen | 561
+
0
-

Nahraď NForm za NAppForm.

Spectator
Člen | 48
+
0
-

Díky! S tím NAppForm o funguje! Co je to zač, nikde jsem na toto nenarazil.

Majkl578
Moderator | 1364
+
0
-

NAppForm (Nette\Application\UI\Form) je rozšířením NForm (Nette\Forms\Form), umí automaticky rozpoznat, zda byl odeslán, to NForm neumí. Viz dokumentace.