Neuspěšné zadání kódu pro vstup do soukromé sekce vypisuje „Kód ‚Array‘ nebyl nalezen“ místo zadané hodnoty

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

Zdravím,
myšlenka je pres databázi (dibi) zkontrolovat zadaný kód zda exsistuje a povolit/nepovolit tak přístup do soukromé sekce což mi funguje ale problém je v tom že když je špatně zadaný kód pro vstup, vyhodi se chyba „Kód ‚Array‘ nebyl nalezen“ místo vložené hodnoty.

presenter s formulářem:

<?php
      public function FormSubmitted(AppForm $form) {
        $values = $form->getValues();

      try {
        $this->getUser()->login($values['code']);
        $this->flashMessage('kód byl přijat');

      } catch (AuthenticationException $e) {
        $form->addError($e->getMessage());
      }
    }
?>

model:

<?php
  class UsersModel extends Object implements IAuthenticator {

      public function authenticate(array $credentials){

      $code = $credentials;
      $row = dibi::fetch('SELECT * FROM codes WHERE code=%s', $code);

      if (!$row) {
			throw new AuthenticationException("Kód '$code' nebyl nalezen", self::IDENTITY_NOT_FOUND);
      }

      return new Identity($row->id, $row->code, $row);
      }
  }
?>
arron
Člen | 464
+
0
-

Je celkem zajimave, ze overovani kodu Ti funguje…Hodnota v $credentials je totiz pole (puvodni vyznam je prihlasovaci jmeno a heslo). Takze misto $code = $credentials budes muset $credentials rozdelit na jednotlive slozky (napr. $credentials[0]).

Zdeno1981
Člen | 115
+
0
-

Díky moc za radu, už mi to jede.

Editoval Zdeno1981 (12. 2. 2011 12:47)

bojovyletoun
Člen | 667
+
0
-

Je to takové magické (chytré). Metoda User::login() funguje „s libovloným počtem“ argumetnů – func_get_args- argumenty se rovnou předají do authenticate() jako pole, takže výsledek pak funguje takto
SELECT * FROM codes WHERE code='first', 'second' – nesmysl
SELECT * FROM codes WHERE code='first' – jo