Validace hesla ve formuláři

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

Dobrý den,

asi jsem už slepý, ale nevím jak na to.

Mám tento kód:

protected function createComponentRegForm()
{
    $form = new UI\Form;
    $form->addText('callsign','Značka')
            ->setRequired('Zadejte, prosím, vaši značku');
    $form->addText('name','Křestní jméno')
            ->setRequired('Zadejte, prosím, vaše křestní jméno');
    $form->addPassword('pass','Zvolte si heslo')
            ->setRequired('Zvolte si, prosím, rozumné heslo');
    $form->addPassword('pass1','Heslo znovu')
            ->setRequired('Zadejte, prosím, heslo ještě jednou pro kontrolu')
            ->addRule(Form::EQUAL, 'Hesla se neshodují', $form['pass']);
    $form->addSubmit('reg','Zaregistrovat');

    $form->onSuccess[] = $this->regFormSucceeded;

    return $form;

}

Bohužel mě laděnka vždy pošle někam, nelíbí se jí $form[‚pass‘] v addRule, vypisuje chybu „Class ‚Form‘ not found“. Díval jsem se do tutoriálu, do fóra a v kouscích kódu to bylo takto. Asi jsem něco přehlédl, ale nenapadá mne co. Nevíte, prosím? Obsah tmp jsem smazal.

Díky za váš čas.

Petr

Vojtěch Dobeš
Gold Partner | 1316
+
0
-

Form::EQUALUI\Form::EQUAL.

Nebo mé oblíbené neprůstřelné $form::EQUAL.

Editoval vojtech.dobes (27. 2. 2013 17:09)

enumag
Člen | 2118
+
0
-

Také používám $form::EQUAL.

PetrHH
Člen | 49
+
0
-

Díky, díky, díky! To funguje. To Form::EQUAL mi fungovalo normálně když jsem používal z Nette jen ty formuláře, teď se snažím udělat celou app v Nette a „trochu“ s tím bojuji. Ještě jsem narazil na jeden problém:

$form = new UI\Form;
$form->addText('callsign','Značka')
        ->setRequired('Zadejte, prosím, vaši značku')
        ->addRule('callsignExists','Uživatel již existuje',$form['callsign']);

a pak dále

public function callsignExists($item, $arg)
{
    return FALSE;
}

Dostávám chybu:
Unknown operation ‚callsignExists‘ for control ‚callsign‘. Stejný případ, pokud jsem používal pouze formuláře z Nette, chodilo mi to. V továrničce ne :-(.

Petr

enumag
Člen | 2118
+
0
-

Jestli se nemýlím tak takto:

->addRule(callback($this, 'callsignExists'),...

Editoval enumag (28. 2. 2013 11:04)

PetrHH
Člen | 49
+
0
-

Nemýlíte,funguje to! Děkuji!

Kde bych našel tyto informace? Zřejmě to asi nějak vychází z funkčnosti, ale jsem natvrdlý a nepoznám to. Dělal jsem to všechno podle dokumentace, ale tam to není :-(.

hAssassin
Člen | 293
+
0
-

a nebo proste jen takto (podobne jako kdyz se pridava callback pro odeslani formulare):

->addRule($this->callsignExists, 'Uživatel již existuje', $form['callsign'])...
PetrHH
Člen | 49
+
0
-

To zní logicky, díky! Mne právě zmátlo, že se název validační funkce v dokumentaci předává jako string. Takto je mi to už jasné.

enumag
Člen | 2118
+
0
-

@PetrHH: Tam se předává v podstatě PHP pseudo-typ callable. Což může být string s názvem fce, Closure (anonymní fce), pole kde první element je objekt a druhý název funkce, objekt s metodou __invoke, možná něco dalšího. Nette k tomu přidává další možnosti:

  • místo array($this, 'nazevMetody') lze psát callback($this, 'nazevMetody')
  • nebo také $this->nazevMetody pokud $this je Nette\Object a nemá property se stejným názvem.
PetrHH
Člen | 49
+
0
-

Děkuji za vysvětlení, zase jsem o něco chytřejší. O tom callable si budu muset něco přečíst. Ještě jednou moc děkuji za trpělivost.