Začátky s registrací uživatelů

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

Zdravíčko,

začínám s Nette a zatím všechno funguje. Dostal jsem se k bodu, kdy potřebuji udělat přihlašování/registraci uživatelů a nevím, jak dále postupovat.

V UsersRepository jsem si vytvořil metodu getUzivatele(), která vrací všechno z tabulky Users a dále funkci registraceUzivatele(), která má daného uživatele zaregistrovat.
Zde je kód.

<?php
class UsersRepository extends Repository {

  public function getUzivatele() {
    return $this->connection->table('users');
  }

  public function pocetUzivatelu() {
    return $this->connection->table('users')->count('*');
  }

  public function registraceUzivatele($login, $email, $password) {
    return $this->getUzivatele()->insert(array(
            'login' => $login,
            'email' => $email,
            'password' => $password
            ));
  }

}
?>

A v presenteru jsem si vytvořil komponentu RegistraceForm a dále registerFormSubmitted.
Zde je kód RegistracePresenter.php, resp. komponenta.

<?php
 protected function createComponentRegistraceForm() {
    $form = new Form;
    $form->addText('login', 'Uživatelské jméno:')
         ->setRequired('Uživatelské jméno je povinné!');
    $form->addText('email', 'Váš Email:')
         ->setRequired('Email je povinný!')
         ->addRule(Form::EMAIL, 'Zadejte, prosím, platnou emailovou adresu!');
    $form->addPassword('password', 'Heslo:')
         ->setRequired('Heslo je povinné!')
         ->addRule(Form::MIN_LENGTH, 'Heslo musí obsahovat min. %d znaky', 4);
    $form->addSubmit('send', 'Registrovat se!')->setAttribute('class', 'button');
    $form->onSuccess[] = $this->registerFormSubmitted;
    return $form;
  }

  public function registerFormSubmitted(UI\Form $form) {
    $this->usersRepository->registraceUzivatele($this->list->idUsers, $form->values->login, $form->values->password, $form->values->email);
  }
?>

Problém je v tom, že když odešlu formulář, tak se nic nestane, jen se refreshne stránka.

ViPEr*CZ*
Člen | 818
+
0
-

Namísto

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

dejte

$form->onSuccess[] = callback($this, "registerFormSubmitted");

a dále proč metodě registraceUzivatele pošlete 4 parametry, ale v definici máte jen 3???
PS: doporučuji si vybrat jeden jazyk cz-en pro pojmenovávání ;-)

Checkpoint
Člen | 34
+
0
-

Dané změny jsem provedl, vymazal jsem i ten parametr (idUsers) a pořád se nedaří. :(

Oli
Člen | 1215
+
0
-

Ještě bych měl 2 postřehy. Je dobré mít ve formuláři zadávání hesla 2× a ověřit, jestli si jsou obě hodnoty rovny. A předpokládám, že to je jen ukázka kódu, ale ve skutečnosti ukládáš hesla v db šifrovaně. ;-)

jiri.pudil
Nette Blogger | 1032
+
0
-

Proč máš v továrničce new Form, ale v typehintu zpracování UI\Form? Nevytváříš v té továrničce náhodou Nette\Forms\Form?

Checkpoint
Člen | 34
+
0
-

jiri.pudil napsal(a):

Proč máš v továrničce new Form, ale v typehintu zpracování UI\Form? Nevytváříš v té továrničce náhodou Nette\Forms\Form?

Děkuji za postřeh, v typehintu jsem UI\Form vymazal, ale pořád nic. Nevím, kde může být chyba.

Oli
Člen | 1215
+
0
-

Jen pro jistotu se zeptám v jakém jmenném prostoru je Form()? a metoda registerFormSubmitted se po odeslání opravdu provede?

Checkpoint
Člen | 34
+
0
-

Pravděpodobně neprovede, jen se refreshne stránka a nic se nestane.

ViPEr*CZ*
Člen | 818
+
0
-

Checkpoint napsal(a):

Pravděpodobně neprovede, jen se refreshne stránka a nic se nestane.

Jaká je URL po odeslání formu?

Checkpoint
Člen | 34
+
0
-

ViPErCZ napsal(a):

Checkpoint napsal(a):

Pravděpodobně neprovede, jen se refreshne stránka a nic se nestane.

Jaká je URL po odeslání formu?

Pořád stejná, localhost/xxxx/registrace

David Matějka
Moderator | 6445
+
0
-

doposud jsi neodpovedel na tu nejdulezitejsi otazku – vytvaris opravdu Nette\Application\UI\Form a ne Nette\Forms\Form?

Checkpoint
Člen | 34
+
0
-

matej21 napsal(a):

doposud jsi neodpovedel na tu nejdulezitejsi otazku – vytvaris opravdu Nette\Application\UI\Form a ne Nette\Forms\Form?

Ano, vytvářím Nette\Forms\Form. :)

David Matějka
Moderator | 6445
+
0
-

coz je spatne, musis vytvaret Nette\Appliation\UI\Form

Checkpoint
Člen | 34
+
0
-

matej21 napsal(a):

coz je spatne, musis vytvaret Nette\Appliation\UI\Form

Super, už to funguje. Díky moc. :)

ViPEr*CZ*
Člen | 818
+
0
-

Checkpoint napsal(a):

ViPErCZ napsal(a):

Checkpoint napsal(a):

Pravděpodobně neprovede, jen se refreshne stránka a nic se nestane.

Jaká je URL po odeslání formu?

Pořád stejná, localhost/xxxx/registrace

Díky špatný instanci na správnou třídu Form tam neproběhl signál formuláře. Teď by mělo být vidět, že po odeslání je v URL i parametr pro signál ;-)