Strata novych hodnot vo formulari po custom addRule (a nevypisanie message)

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

Na specialnu podmienku potrebujem pridat custom addRule (viem ze nebudem mat JS validaciu) tak som chcel vyskusat priklad z dokumentacie kde som upravil typ objektu na „\Nette\Forms\Controls\TextInput“ ale z kodom nizsie mam 2 problemy:

  1. Ak zadana hodnota nie je liche cislo, tak sa mi formular po odoslani prepise so starymi hodnotami – vratane ceny. Ja by som chcel aby vsetky hodnoty ostali a zobrazil sa len (flash)error message. Co mam pre to urobit?
  2. Ten message sa mi nikde nezobrazi – flashmessage ale funguju spravne. Tusite preco?
$form->addText("price", "Cena")
	->addRule(Form::INTEGER, '%label musí být číslo')
	->addRule(function (\Nette\Forms\Controls\TextInput $control) {
		return (bool) ($control->getValue() % 2);
	}, 'Musíte uvést liché číslo');

Inak som to skusil aj cez „$form->onValidate[] = $this->validateInputForm;“ ale mam presne oba problemy ako pri custom addRule. Kde je chyba?

Dakujem!!!

Editoval JanB (6. 10. 2013 13:02)

pave.kucera
Člen | 122
+
0
-

Ukaž callbacky, které navěšuješ na $form->onSuccess.

jiri.pudil
Nette Blogger | 1032
+
0
-

Ad 1. Jakým způsobem plníš formulář výchozími hodnotami?

Ad 2. addRule() nevyvolá flash message, nýbrž přidá chybovou hlášku formulářovému prvku (ve 2.0 i celému formuláři) voláním addError(). V šabloně je můžeš vypsat např. takto:

{if $form['price']->hasErrors()}
	<div class="error" n:foreach="$form['price']->getErrors() as $error">{$error}</div>
{/if}
JanB
Člen | 21
+
0
-

jiri.pudil napsal(a):

Ad 1. Jakým způsobem plníš formulář výchozími hodnotami?

Ad 2. addRule() nevyvolá flash message, nýbrž přidá chybovou hlášku formulářovému prvku (ve 2.0 i celému formuláři) voláním addError(). V šabloně je můžeš vypsat např. takto:

{if $form['price']->hasErrors()}
	<div class="error" n:foreach="$form['price']->getErrors() as $error">{$error}</div>
{/if}

Vdaka za tipy, prisiel som na to ze som mal zle pomenovanu render metodu a tak sa mi nenastavovali default hodnoty, uz to funguje.

function renderEdit($id) {
	$this['productInputForm']->setValues($this->myfilter($this->template->product));
}

Ten error div idem skusit pridat… Bude fungovat aj $form->getErrors() ?

Editoval JanB (6. 10. 2013 13:55)

JanB
Člen | 21
+
0
-

Jiri a Pave – oba body su vyriesene a funguje to. Funguje aj $form->hasErrors() a $form->getErrors().
(Cize ak je potreba daju su urobit nieco ako flashmessage pre formu.)
Ste super, diki!!!

Editoval JanB (6. 10. 2013 14:03)