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
+
0
-

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
+
0
-

Já bych řekl že je to očekávané a bezpečnostní chování :-) Nicméně máš dvě možnosti.

  1. napsat si vlastní control, třeba addCheck a tam s tím pracovat…
  2. a nebo se podívej na persistent možnost addHidden, testy by ti měli pomoct jak toho docílit
microcz
Člen | 62
+
0
-

Díky