Název aktuálního presenteru a akce mimo presenter

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

Je možný získat název a akci aktuálního presenteru mimo presenter? Díky

ViPEr*CZ*
Člen | 817
+
0
-

Nutelac napsal(a):

Je možný získat název a akci aktuálního presenteru mimo presenter? Díky

Co to znamená mimo presenter???

Nutelac
Člen | 58
+
0
-

Například v modelu

enumag
Člen | 2118
+
0
-

Asi by to šlo přes Environment, ale imho máš špatný návrh. Model by neměl být závislý na aktuálním presenteru – když ten samý model budeš potřebovat v jiném presenteru, začne se chovat jinak.

Editoval enumag (22. 1. 2013 17:24)

Nutelac
Člen | 58
+
0
-

V databázi mám uložené presentery jako zdroje pro oprávnění. Potřeboval jsem to kvůli automatické kontrole, zda má uživatel právo pro přístup k presenteru.

enumag
Člen | 2118
+
0
-

Ten kód který to kontroluje ale voláš zřejmě buď ve startup nebo v checkRequirements takže můžeš bez problémů předat $this->getName(); jako parametr té tvé kontrolní fci.

Editoval enumag (22. 1. 2013 17:35)

ViPEr*CZ*
Člen | 817
+
0
-

Tak jméno a akce je textový řetězec… v podstatě nejde o závislost na presenteru :-)
Samozřejmě jak psal enumag, tak modelu je houby po tom, který presenter či komponenta ho používá.
Presenter (jak už napsal enumag) má metodu getName() na získání jména presenteru a metody getView() a getAction() na získání aktuálního pohledu či akce.

vvoody
Člen | 910
+
0
-

Najlepšie by bolo asi mať po ruke Nette\Application\Request ale ten je zadrátovaný v Nette\Application\Application a vôbec sa nedostane do DI containera. Vie mi niekto povedať či to je úmyselne? Ak hej, prečo? Už viac krát som chcel predať službe parameter bez potreby mať presenter.

Nutelac
Člen | 58
+
0
-

Díky všem. Nakonec jsem to vyřešil tak, že jsem předal celou třídu „Nette\Application\Application“. Ještě mě zajímalo, jestli existuje nějaká metoda, pomocí které se dá zjistit, jestli akce, signál nebo presenter existuje (jestli je adresa, např. „Article:view“ validní).

enumag
Člen | 2118
+
0
-

Zkusíš vytvořit odkaz na tuto akci pomocí $presenter->link() a odchytíš výjimku InvalidLinkException.