isLinkCurrent na všechny soubory v presenteru

bautren
Člen | 7
+
0
-

Zdravím, řeším menší problém. Ve složce s presenterem Admin mám soubory „default.latte“,„warehouse.latte“ atd.. No a chtěl bych nějakým způsobem odchytit, zda se tyto soubory nachází v presenteru Admin. Tudíž když by si přihlášený uživatel chtěl zobrazit presenter Homepage, tak by ho to automaticky přesměrovalo na AdminPresenter. Což už svým způsobem funguje viz.

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

		if($this->user->isLoggedIn() && !$this->isLinkCurrent('Admin:')) {
			$this->redirect('Admin:default');
		}
	}

Ale přesměrovaní se děje i když dát url /admin/warehouse, což nechci. Nevíte někdo jak bych tohle mohl vyřešit ? Díky moc

m.brecher
Backer | 128
+
0
-

Ahoj, tak jak to popisuješ by to znamenalo, že přihlášený uživatel nemá šanci si prohlédnout homepage, což moc nedává smysl. Proč ho z homepage přesměrovat?? Přechod do administrace by se dal normálně řešit vykreslením linku do administrace pro přihlášeného uživatele.

Ale budiž, dejme tomu, že je vhodné přesměrovat přihlášeného uživatele z homepage webu do administrace, ale uvnitř administrace už nepřesměrovávat – jak píšeš, to celkem logicky vadí.

Bezpečnější bude detekovat ty stránky, ze kterých chceme přesměrovat – tedy homepage. Zkusil bych tedy něco takového:

public function startup(): void {
	parent::startup();
	if($this->user->isLoggedIn() && $this->getAction(true) === 'Homepage:default')  // homepage
	{
			$this->redirect('Admin:default');
	}
}

Poznámka: $presenter->getAction(‚Homepage:default‘, true) vrátí fullyQualifiedAction – což je plná cesta k akci tedy včetně modulu a presenteru (Modul:Presenter:action). Předpokládám, že máš homepage na ‚Homepage:default‘

Editoval m.brecher (14. 2. 3:13)

petr.pavel
Člen | 532
+
0
-

Jestli tomu dobře rozumím, máš tenhle startup() v nějakém BasePresenteru, který dědí úplně všechny presentery, včetně AdminPresenteru.

Ve static::class najdeš název třídy potomka, takže ten if by mohl vypadat:

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

	if($this->user->isLoggedIn() && static::class !== AdminPresenter::class)) {
		$this->redirect('Admin:default');
	}
}