Pristup k formulari v metode odeslani pomoci SubmitButton $button

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

V metode resetPasswordClicked(SubmitButton $button) pristupuji k hodnotam odeslanym z formulare pres $form = $this['editForm'];

Pri zachyceni vyjimky DibiDriverException ze uzivatel jiz v DB existuje se mi ale stranka presmeruje. Kdyz dam do vyjimky kod $this->redirect('this'); tak zustanu na aktualnim formulari, ale pole ktere vyhodi chybu se mi prepise na puvodni hodnotu.

Jak nastavim hodnotu, ktera byla odeslana?

Šaman
Člen | 2632
+
0
-

Já si po každém odeslání (ještě před non-live validací) ukládám načtené $values do sessions. Pak se dají při jakékoliv chybě zase předvyplnit. Jenom pak někdy musím rozhodovat mezi už validovanou hodnotou, odeslanou syrovou hodnotou a default hodnotou. Beru v tomto pořadí první která je isset().

marek.dusek
Člen | 99
+
0
-

A proč se ti to přesměruje při chybě? Ja to vždy řeším nějak takto:

<?php
try {
  $model->begin();

  $model->save($form->getValues());

  $model->commit();

  $this->flashMessage('Vše ok');

  $this->redirect(někam);
  // a jsme pryč

} catch (DibiException $e) {
  $model->rollback();

  $form->addError('Chyba: '.$e->getMessage());
  // zůstaneme na aktuální stránce, hodnoty jsou ve formu
}
?>

Mimochodem toto je přesně důvod, proč považuju za zlo zneužívání výjimek pro řízení chodu aplikace (různé ty Abort, Forwarding atp.) – nelze pak chytat všechno, protože jednu takovou vyhodí ten redirect() – a je třeba ho buď dát mimo ten try-catch, nebo výjimky explicitně vyjmenovat atp. Pruda, imho zbytečná.

OT: Jaký je rozíl mezi tlačítky „Poslat“ vpravo a „Odeslat“ dole vlevo? ;)

Honza Kuchař
Člen | 1662
+
0
-

OT: Jaký je rozíl mezi tlačítky „Poslat“ vpravo a „Odeslat“ dole vlevo? ;)

Taky jsem na to koukal. :) To Poslat asi dělá texila. Odeslat dělá Nette/phpBB? :)