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.