Primitivní CAPTCHA neprojde Nette validací?

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

Na opsání jednoho čísla funguje bez problémů:

$c1 = mt_rand(0, 9);
$c2 = mt_rand(0, 9);
$form->addHidden('c1', $c1);
$form->addHidden('c2', $c2);
$form->addText('captcha')->setAttribute('placeholder', "Vypočítejte příklad $c1 + $c2 =")
    ->addRule(Form::FILLED, "Vypočítejte příklad $c1 + $c2 =")
    ->addRule(Form::EQUAL, 'Zadejte prosím správný výsledek.', $form['c1']);

Problém je, když tam chci mít „příklad“:

$form->addText('captcha')->setAttribute('placeholder', "Vypočítejte příklad $c1 + $c2 =")
   ->addRule(Form::FILLED, "Vypočítejte příklad $c1 + $c2 =")
   ->addRule(Form::EQUAL, 'Zadejte prosím správný výsledek.', $form['c1']->getValue() + $form['c2']->getValue());

Přes JS validaci projde správně přes správný výsledek, ale pořád tam někde vzniká error, protože onSuccess[] se nevykoná, pouze onSubmit[], když si vypíšu chyby formuláře, tak samozřejmě „Zadejte prosím správný výsledek“.

Díky za pomoc.

pepakriz
Člen | 246
+
0
-

Není to tím, že po odeslání se vygenerují jiná náhodná čísla?

Mysteria
Člen | 797
+
0
-

Ano je to tím, ale v tom případě by pak neměl fungovat ani ten první příklad ne?

Editoval Mysteria (8. 1. 2014 14:13)

Mesiah
Člen | 240
+
0
-

V prvním příkladu ty čísla přenášíš v hidden fieldech – mě naopak zaujalo, že c1 + c2 = c1 :)

Mysteria
Člen | 797
+
0
-

@Mesiah: Přenáším je samozřejmě taky, jenom jsem to tam nedával, kompletní 2. příklad samozřejmě vypadá takhle:

$c1 = mt_rand(0, 9);
$c2 = mt_rand(0, 9);
$form->addHidden('c1', $c1);
$form->addHidden('c2', $c2);
$form->addText('captcha')->setAttribute('placeholder', "Vypočítejte příklad $c1 + $c2 =")
    ->addRule(Form::FILLED, "Vypočítejte příklad $c1 + $c2 =")
    ->addRule(Form::EQUAL, 'Zadejte prosím správný výsledek.', $form['c1']->getValue() + $form['c2']->getValue());

Proto mě právě není jasný, jak je možný, že když to kontroluju jenom na hodnotu jednoho z nich, tak to funguje, ale jakmile chci kontrolovat součet, tak to už nejde.

Mesiah
Člen | 240
+
0
-

Hele a skutečně vrací metoda getValue() string, nebo obecně skalární typ?

Editoval Mesiah (9. 1. 2014 1:45)

Mysteria
Člen | 797
+
0
-

@Mesiah: Vrací normálně string. Ale problém bude někde v getValue(), protože:

// Projde
addRule(Form::EQUAL, 'Zadejte prosím správný výsledek.', $form['c1']);
// NEprojde
addRule(Form::EQUAL, 'Zadejte prosím správný výsledek.', $form['c1']->getValue());
// Tohle nemůžu udělat, protože Nette\Forms\Controls\HiddenField could not be converted to int
addRule(Form::EQUAL, 'Zadejte prosím správný výsledek.', $form['c1'] + $form['c2']);
// NEprojde
addRule(Form::EQUAL, 'Zadejte prosím správný výsledek.', $form['c1']->getValue() + $form['c2']->getValue());

Editoval Mysteria (9. 1. 2014 18:14)

David Grudl
Nette Core | 8228
+
0
-

Problém bude nejspíš v tom, že getValue() vrací NULL, ne?

Mysteria
Člen | 797
+
0
-

Když si to dumpnu v šabloně, tak to normálně vrací string.