V presenteru nelze volat getUser()

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

Dobrý den, když v presenteru volám

$this->getUser()->isLoggedIn()

Call to a member function isLoggedIn() on a non-object

Kód vypadá takto:

class HomePresenter extends \Nette\Application\UI\Presenter{

    /** @var Nette\Security\User */
    private $user;
    public function __construct() {
        parent::__construct();
        if(!$this->getUser()->isLoggedIn())
            $this->redirect("Homepage:");
    }
}

Chci ověřit jestli byl uživatel přihlášen, pokud ne tak bude přesměrován na hlavní stránku.

David Kudera
Člen | 455
+
0
-

Zdravím, v konstruktoru user ještě neexistuje. Stačí ale použít metodu startup.

bluray
Člen | 178
+
0
-

díky můžeš mi prosím tě ukázat jak jí použiju? ta metoda se bude volat automaticky? jaký je její princip? Díky

David Matějka
Moderator | 6445
+
0
-
class HomePresenter extends \Nette\Application\UI\Presenter{

    public function startup() {
        parent::startup();
        if(!$this->getUser()->isLoggedIn())
            $this->redirect("Homepage:");
    }
}

ano, ta metoda se vola automaticky ve chvili, kdy je presenter pripraven – tedy jsou vlozeny vsechny zavislosti, inicializovany parametry …

bluray
Člen | 178
+
0
-

takže místo konstruktoru se používá startup? dá se nějak v presenteru využít konstruktor?

David Matějka
Moderator | 6445
+
0
-

Konstruktor pouzivej maximalne pro vlozeni zavislosti. Vsechnu logiku provadej nejdrive v onom startupu