Ako overit v ktorom presenteri sa nachadzam

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

Chcem presmerovat neprihlasenych uzivatelov, preto som do zakladnej triedy od ktorej dedia vsetky presentery pridal presmerovanie, problem je ze z nej dedi aj „Sign“ presenter a ten sa potom snazi presmerovat sam na seba a vytvori nekonecny cyklus, ako tomu zabranit?

<?php
namespace WebModule;

abstract class WebBasePresenter extends \BasePresenter
{
	protected function startup()
	{
	    parent::startup();

	    // Potreboval by som nieco ako !$this->getUser()->isLoggedIn() && $this->getName() != "Sign"
	    if (!$this->getUser()->isLoggedIn()) {
	        $this->redirect('Sign:in');
	    }
	}
}
?>
Michal Vyšinský
Člen | 608
+
0
-

// Potreboval by som nieco ako !$this->getUser()->isLoggedIn() && $this->getName() != „Sign“

No a proč to tam nedáš?

Editoval CherryBoss (9. 9. 2013 15:09)

David Matějka
Moderator | 6445
+
0
-

doporucuju spis upravit strukturu presenteru, jak od sebe budou dedit – treba:

BasePresenter
	SignPresenter
	SecuredPresenter - az tady budes overovat prihlaseni
		FooPresenter
		BarPresenter
		....
buksy
Člen | 22
+
0
-

@CherryBoss: Lebo to som si len tak tipol ale nevidel som to v dokumentacii (nevedel som ze to existuje), potom som nasiel metodu $this->getRequest()->getPresenterName() :)

@matej21: Dobry napad, dakujem

enumag
Člen | 2118
+
0
-

@matej21: Zrovna na přihlášení tohle nepotřebuješ, Nette na to má anotaci @User(loggedIn). Osobně žádný SecuredPresenter už dávno nepoužívám.

duke
Člen | 650
+
0
-

@enumag: Předpokládám, že případné přesměrování na Sign presenter či jinam pak řešíš přes Application::onError. Je to tak?

enumag
Člen | 2118
+
0
-

@duke: Ne, to dělám v ErrorPresenteru na základě typu vyhozené exception.

Editoval enumag (9. 9. 2013 19:44)

n.u.r.v.
Člen | 485
+
0
-

Ahoj, a jak moc špatná je moje metoda, když mám SignPresenter, HomepagePresenter a další a v každém presenteru (kde je přihlášení vyžadováno) mám v metodě startup() toto:

public function startup() {
        parent::startup();

        if (!$this->getUser()->isLoggedIn()) {//pokud není uživatel přihlášen
            $this->redirect('Sign:in');
        }
....
....
}

A naopak v SignPresenteru mám:

public function startup() {
        parent::startup();
        if ($this->getUser()->isLoggedIn()) {//pokud je uživatel přihlášen
            $this->redirect('Homepage:default');
        }
}

díky…

enumag
Člen | 2118
+
0
-

@n.u.r.v.: Jako špatnou bych ji nenazval (taky jsem to dříve používal), jen to dle mého soukromého názoru není best practice.