IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Dominik Gavrecký:22.6.2016 17:34

Ahojte,

natrafil som na celkom zaujímavý problém. Vytvoril som si formulár a následne validáciu a success. Problém je v tom že ak sa password != passwordVerify chybu vyhodí ale príkaz sa vykoná teda zapíše uživateľa do DB.

/**
 * @return Form
 * Vytvára a vracia komponentu formulára pre registráciu
 */
protected function createComponentRegistrationForm()
{
    $form = new Form;

    $form->addText('username')
        ->setAttribute('placeholder', 'Použivateľské meno')
        ->setRequired();

    $form->addPassword('password')
        ->setAttribute('placeholder', 'Heslo')
        ->addRule(Form::MIN_LENGTH, 'Heslo musí obsahovať minimálne 6 znakov.', 6)
        ->setRequired();

    $form->addPassword('passwordVerify')
        ->setAttribute('placeholder', 'Heslo znovu')
        ->addRule(Form::EQUAL, 'Hesla sa nezhodujú.', $form['password']);

    $form->addText('email')
        ->setAttribute('placeholder', 'E-mail')
        ->setType('email')
        ->setRequired();

    $form->addSubmit('submit', 'Registrovať sa');

    $form->onValidate[] = [$this, 'registrationFormValidate'];
    $form->onSuccess[] = [$this, 'registrationFormSuccess'];

    return $form;
}

/**
 * @param Form $form Formulár pre registráciu
 * @param ArrayHash $values Hodnoty z formulára
 * Callback pre validáciu formulára pre registráciu
 */
public function registrationFormValidate($form, $values)
{
    try {
        $this->userManager->register($values);
    } catch (DuplicateNameException $e) {
        $form->addError($e->getMessage());
    }
}

/**
 * @param Form $form Formulár pre registráciu
 * @param ArrayHash $values Hodnoty z formulára
 * Callback po odoslaní formulára pre registráciu
 */
public function registrationFormSuccess(Form $form, $values)
{
    $this->flashMessage('Pre úspešne dokončenie registrácie potvrďte potvrdzovací email.');
    $this->redirect('this');

}

{form registrationForm}
<ul class="errors" n:if="$form->hasErrors()">
    <li n:foreach="$form->errors as $error">{$error}</li>
</ul>
<div class="row">
    <div class="col-lg-12 m-sm">
        <span><i class="fa fa-user" aria-hidden="true"></i></span>
        {input username}
    </div>
</div>
<div class="row">
    <div class="col-lg-12 m-sm">
        <span><i class="fa fa-key" aria-hidden="true"></i></span>
        {input password}
    </div>
</div>
<div class="row">
    <div class="col-lg-12 m-sm">
        <span><i class="fa fa-key" aria-hidden="true"></i></span>
        {input passwordVerify}
    </div>
</div>
<div class="row">
    <div class="col-lg-12 m-sm">
        <span><i class="fa fa-envelope-o" aria-hidden="true"></i></span>
        {input email}
    </div>
</div>
<div class="row">
    <div class="col-lg-12 m-sm">
        {input submit}
    </div>
</div>
{/form}

/**
 * Registruje nového uživateľa do systému.
 * @param ArrayHash $values Hodnoty z formu
 * @throws DuplicateNameException Ak uživateľ s uvedením menom už existuje
 */
public function register($values)
{
    try {
        $this->database->table(self::USERS_TABLE)->insert(array(
            self::COLUMN_NAME => $values->username,
            self::COLUMN_PASSWORD_HASH => Passwords::hash($values->password),
            self::COLUMN_ROLE => 'user',
            self::COLUMN_EMAIL => $values->email
        ));
    } catch (UniqueConstraintViolationException $e) {
        throw new DuplicateNameException;
    }
}
Editováno 22.6.2016 17:34
Odpovědět
22.6.2016 17:34
Hlupák nie je ten kto niečo nevie, hlupákom sa stávaš v momente keď sa na to bojíš opýtať.
Avatar
Odpovídá na Dominik Gavrecký
Martin Konečný (pavelco1998):22.6.2016 17:59

Událost onValidate nepoužívám, ale neni problém náhodou v tom, že se ta metoda volá ještě dřív, než se zvalidují všechny inputy?
Resp. během procesu validace už vkládáš uživatele do DB. To řeš až v metodě registrationFor­mSuccess.

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
22.6.2016 17:59
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
Odpovídá na Martin Konečný (pavelco1998)
Dominik Gavrecký:22.6.2016 18:08

Taká hlúposť a nenapadlo ma to ... Ďakujem ti za pomoc

Nahoru Odpovědět
22.6.2016 18:08
Hlupák nie je ten kto niečo nevie, hlupákom sa stávaš v momente keď sa na to bojíš opýtať.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.