Call to undefined method Nette\Database\Table\Selection::add()
- TomasHuttner
- Člen | 66
Dobrý den, chtěl bych se zeptat jak definovat metodu add() která je v modelu UserManager?
Chyba:
Call to undefined method Nette\Database\Table\Selection::add().
Laděnka:
Na řádku 67 je chyba.
57: $password = $values->pass;
58:
59: $row = $this->database->table('uzivatele')->fetch('login', 'email');
60:
61: if ($row->login == $values->login and $row->email == $values->email)
62: {
63: $this->flashMessage('Uživetelské jméno nebo email je již použit v databazi!', 'error');
64: }
65: else
66: {
67: $post = $this->database->table('uzivatele')->add($username, $password);
68:
69: $this->flashMessage('Registrace proběhla uspěšně!', 'success');
70: $this->redirect('Nastroje:registrace');
71: }
- David Matějka
- Moderator | 6445
tu metodu add nemuzes volat nad selection, ale nad UserManager-em. Kodem
$this->database->table('uzivatele')
neziskas UserManager, ale
Selection pro tabulku uzivatele
- TomasHuttner
- Člen | 66
Kod sem změnil na:
$post = $this->add($username, $password);
a chyba je: Call to undefined method App\NastrojePresenter::add().
Proste nevím jak udělat a by sem funkci add() která je v modelu UserManager, mohl používat v presenteru.
- Mariocz
- Člen | 52
Taky si nejsem úplně jistej co přesně chceš
jestli ti jde o přidání do databáze – metoda insert():
<?php
$post = $this->database->table('uzivatele')->insert(array('username'=>$username, 'password'=>$password);
?>
a když se snažíš zjistit jestli uživatel v DB je, měl bys použít WHERE a hledat konkrétního uživatele/email a pak zjišťovat jestli se řádek vrátil nebo ne
<?php
$this->database->table('uzivatele')->where("username", $values->username);
?>
- Jan Suchánek
- Člen | 404
Presenter po odeslání nějakého formuláře na registraci
public function onSuccessExampleFormRegistration(\Nette\Application\UI $form)
{
$values = $form->getValues();
try {
$this->userManager->add($values);
$this->flashMessage('Registrace proběhla uspěšně!', 'success');
$this->redirect('Nastroje:registrace');
} catch(MyExampleException $e){
$form->addError("Uživatelské jméno již zřejmě existuje, prosím zkuste jiné.");
}
}
V nějakém UserManageru?
public function add($values){
try {
$this->table->insert(array("username" => $values->username, "password" => $values->password));
} catch(PDOException $e){
throw new MyExampleException;
}
}
Omlouvám se za případné chyby psal jsem to rychle. Každopádně při registraci bych se nespoléhal na to, že řádek vyhledám a pokud neexistuje vkládám, ale využíval bych db, tzn. využívat vyjímky je lepší ne?
OT: Ještě by mě zajímalo nebylo by lepší při registraci uživatele ověřit jen unikátnost emailu a uživateli poslat přístup do účtu na jeho emailovou adresu?
Editoval jenicek (15. 2. 2014 16:36)