Změna hodnoty v hidden formuláře
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- microcz
- Člen | 62
Ahoj,
pokouším se do nette formuláře náhodně vygenerovat dvě čísla, aby byl
uživatel nucen zadat jejich součet. Generování chci provádět znovu i po
neúspěšné validaci formuláře.
<?php
protected function createComponentRegForm() {
...
// Numbers
$num1 = round(rand(1, 9));
$num2 = round(rand(1, 9));
// Form
$form = new Nette\Application\UI\Form;
$form->addText('email', 'E-mail:');
$form->addPassword('passwd1', 'Heslo:');
$form->addPassword('passwd2', 'Heslo znovu:');
$form->addText('control', 'Kolik je '.$num1.' + '.$num2.':');
$form->addHidden('check')->setValue($num1 + $num2);
// $form->addHidden('check')->setDefaultValue($num1 + $num2); // stejny efekt
// $form->addHidden('check', $num1 + $num2); // stejny efekt
// Triggers
$form->onSuccess[] = array($this, 'regFormSubmitted');
$form->onValidate[] = array($this, 'validateRegForm');
...
?>
Problém je, že se mi do hiddenu „check“ vloží hodnota jen z prvního „vytvoření“ formuláře. Takže pokud kvůli nějakému jinému poli neprojde validace na první pokus. Tak se mi sice mění popisek u položky „control“, ale součet v „check“ je pořád roven původní hodnotě.
Tady https://forum.nette.org/…rvky-prazdne#… jsem našel člověka, co před třemi lety řešil podobný problém. Jemu tenkrát fungovalo „setDefaultValue“, aby šel hidden měnit, mě teď s novým nette ne.
- Marek Šneberger
- Člen | 130
Já bych řekl že je to očekávané a bezpečnostní chování :-) Nicméně máš dvě možnosti.
- napsat si vlastní control, třeba addCheck a tam s tím pracovat…
- a nebo se podívej na persistent možnost addHidden, testy by ti měli pomoct jak toho docílit