Problém s registračním formulářem

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

Ahoj,

nevím si rady s registračním formulářem. V komponentě mám tuto metodu:

protected function createComponentSignUpForm()
    {
        $form = new UI\Form();

        $form->setTranslator($this->translator);
        $form->addText('first_name', 'Jméno')
            ->setAttribute('class', 'form-control')
            ->setRequired();
        $form->addText('last_name', 'Příjmení')
            ->setAttribute('class', 'form-control')
            ->setRequired();
        $form->addEmail('email', 'E-mail')
            ->setAttribute('class', 'form-control')
            ->addRule(function (IControl $control) {
                return $this->userManager->isEmailRegistered($control->getValue());
            }, 'Email je již registrován')
            ->setRequired();
        $form->addPassword('password', 'Heslo')
            ->setAttribute('class', 'form-control')
            ->addRule(UI\Form::FILLED, 'Vyplňte heslo')
            ->addRule(UI\Form::MIN_LENGTH, 'Minimálně %d znaků', 6);
        $form->addPassword('password_again', 'Heslo znovu')
            ->setAttribute('class', 'form-control')
            ->addRule(UI\Form::FILLED, 'Vyplňte heslo znovu')
            ->addRule(UI\Form::EQUAL, 'Hesla se neshodují', $form['password']);
        $form->addText('address', 'Adresa')
            ->setAttribute('class', 'form-control')
            ->setRequired();
        $form->addText('phone_number', 'Telefonní číslo')
            ->setAttribute('class', 'form-control')
            ->setRequired();
        $form->addCheckbox('public', 'Zobrazit kontaktní údaje veřejně')
            ->setAttribute('class', 'form-control');
        $form->addSubmit('send', 'Odeslat')
            ->setAttribute('class', 'btn btn-primary btn-block');

        $form->onSuccess[] = [$this, 'processSignUpForm'];

        return $form;
    }

Problém je, že ty chybové hlášky (a tudíž i pravidla) se vůbec „neaplikují“. Zobrazí se defaultní „Vyplňte prosím toto pole“. Ale další validace se již neprovede. Když formulář odešlu, tak se stránka obnoví, ale zpracování se nedostane ani do metody processSignUpForm.

JZechy
Člen | 161
+
0
-

@curl6 Když nevyplníš setRequired(), tak výchozí hláška je „vyplňte, prosím, toto pole“.

Druhá věc je, že netteForms.js (validace javascriptem), funguje tak, že okamžitě vyhazuje první chybu alertem, dál už nejde.

Třetí věc je, když to projde na stranu serveru, tak správně se processForm nezpracuje (jsou-li tam chyby). V tomto případě se „vracíš zpět“ s tím, že se zobrazují chybové hlášky. Pokud si formulář vykresluješ manuálně a né přes {control}, musíš manuálně vykreslovat i chybové hlášky.

curl6
Člen | 29
+
0
-

JZechy napsal(a):

@curl6 Když nevyplníš setRequired(), tak výchozí hláška je „vyplňte, prosím, toto pole“.

Druhá věc je, že netteForms.js (validace javascriptem), funguje tak, že okamžitě vyhazuje první chybu alertem, dál už nejde.

Třetí věc je, když to projde na stranu serveru, tak správně se processForm nezpracuje (jsou-li tam chyby). V tomto případě se „vracíš zpět“ s tím, že se zobrazují chybové hlášky. Pokud si formulář vykresluješ manuálně a né přes {control}, musíš manuálně vykreslovat i chybové hlášky.

No, jasně, to dává smysl. Děkuji moc za nakopnutí.