Jak zachytit vyjímku v nette

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

Ahoj, chtěl bych při neúspěšném pokusu o přihlášení odchytit vyjímku a přesměrovat uživatele na vlastní chybovou stránku. Problém je že vyjímka mi do mého catch bloku nedoputuje a zobrazí se standardní nette červené okno s vyjímkou. Poradíte?

class UserManager extends Nette\Object implements Security\IAuthenticator {

  /** @var \DibiConnection @inject */
  public $db;

  /**
   * Performs an authentication.
   * @return Nette\Security\Identity
   * @throws Nette\Security\AuthenticationException
   */
  public function authenticate(array $credentials) {

    // Retrieve username and password
    list($login, $password) = $credentials;

    // Select user with given login from database
    $user = (new Dao\ApplicationUser())->setDb($this->db)->loadByLogin($login);
    if (!$user->isPopulated()) {
      $msg = 'The username is incorrect.';
      $arg = self::IDENTITY_NOT_FOUND;
      throw new Nette\Security\AuthenticationException($msg, $arg);
    }

    // Check user password
    if (!$this->checkPassword($user, $password)) {
      $msg = 'The password is incorrect.';
      $arg = self::INVALID_CREDENTIAL;
      throw new Nette\Security\AuthenticationException($msg, $arg);
    }

     // Check active
    if (!$user->isActive()) {
      $msg = 'User account is not active.';
      $arg = self::NOT_APPROVED;
      throw new Nette\Security\AuthenticationException($msg, $arg);
    }

    // Check verification
    if (!$user->isVerified()) {
      $msg = 'User is not verified.';
      $arg = self::NOT_APPROVED;
      throw new Nette\Security\AuthenticationException($msg, $arg);
    }

    // Update last login
    if (!$user->updateLastLogin($this->getUserIp())) {
      $msg = 'Cannot update user IP.';
      $arg = self::FAILURE;
      throw new Nette\Security\AuthenticationException($msg, $arg);
    }

    // Create identity
    return new Nette\Security\Identity($user->getId(), $user->getRoleid());
  }

kód v presenteru

public function signInFormSubmitted(UI\Form $form) {
  $vals = $form->getValues();
  try {
    $this->getUser()->login($vals['login_login'], $vals['login_password']);
  } catch (Exception $e) {
    // Sem to nedoputuje
    $this->redirect('MyErrorPresenter:');
  }
  $this->flashMessage('Byl jsi úspěšně přihlášen.');
  $this->redirect('Homepage:');
}
matopeto
Člen | 395
+
0
-

skus:

<?php

catch (\Exception $e)

?>

Pripadne spravnejsie:

<?php

catch (Nette\Security\AuthenticationException $e)

?>

Editoval matopeto (11. 5. 2014 17:22)

duke
Člen | 650
+
0
-

Nejspíš problém s namespacem. Zkus nahradit:

} catch (Exception $e) {

tímto:

} catch (\Exception $e) {
microcz
Člen | 62
+
0
-

Pomohlo, dekuji vam