isLinkCurrent na všechny soubory v presenteru
- bautren
- Člen | 7
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
- Generous Backer | 873
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. 2022 3:13)
- petr.pavel
- Člen | 535
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');
}
}