dokážu nějak v presenteru zjistit jaká šablona se volá?

Laddy
Člen | 12
+
0
-

Ahoj,

dokážu prosím nějak v presenteru (konkrétně ve startup()) zjistit jaká šablona byla zavolána?

Konkrétně mi jde o

$this->redirect('Gamepage:end');

(pokud aktuálně už nejsem v Gamepage:end)

Děkuju

Pepino
Člen | 249
+
0
-

$this->action

Laddy
Člen | 12
+
0
-

@Pepino
You are a Legend :)
Díky

Pepino napsal(a):

$this->action

Marek Bartoš
Nette Blogger | 1171
+
+1
-

Nejsprávněji $this->getView()
$this->view a $this->action jsou deprecated
$this->getAction() sice většinou vrací totéž, co view, ale view jde nastavit i na jinou hodnotu, než název aktuální akce

Laddy
Člen | 12
+
0
-

@Marek Bartoš
Ještě lépe… pánové, respekt… vždyť je to skoro helpline online :)
Když jsem řešli support na placenou verzi Adobe Lightroom bylo to řádově pomaleší :)

Marek Bartoš napsal(a):

Nejsprávněji $this->getView()
$this->view a $this->action jsou deprecated
$this->getAction() sice většinou vrací totéž, co view, ale view jde nastavit i na jinou hodnotu, než název aktuální akce

Kamil Valenta
Člen | 762
+
0
-

Ne, protože ve startup() žádná šablona zavolána nebyla.
$this->action Ti vrátí actionu, která se dle routy bude volat. A dost možná to bude odpovídat i render metodě, která se zavolá a šabloně, která se vykreslí.
Ale jisté to není, v actioně se to může forwardnout nebo se vykreslení přesune jinam pomocí $this->setView(…);

https://doc.nette.org/…n/presenters#…

Laddy
Člen | 12
+
0
-

@KamilValenta Díky :)

Kamil Valenta napsal(a):

Ne, protože ve startup() žádná šablona zavolána nebyla.
$this->action Ti vrátí actionu, která se dle routy bude volat. A dost možná to bude odpovídat i render metodě, která se zavolá a šabloně, která se vykreslí.
Ale jisté to není, v actioně se to může forwardnout nebo se vykreslení přesune jinam pomocí $this->setView(…);

https://doc.nette.org/…n/presenters#…

Marek Bartoš
Nette Blogger | 1171
+
0
-

Pročítám to ještě jednou a sice se ptáš na šablonu, ale vlastně chceš vědět na jaké jsi akci :)
Takže getAction() by nejspíš bylo přesnější.
Případně existuje ještě $this->isLinkCurrent(), pokud chceš rozlišit víc než jen akci https://doc.nette.org/…eating-links#…
Ale většinou je vhodnější kód pro určité akce psát do action metod. Pro akci end by to byla public function actionEnd()

Laddy
Člen | 12
+
0
-

@Marek Bartoš
Díky…

Mimochodem, když tě mám takhle online :) Můžu ještě jeden dotaz …
nelíbí se mi název šablony default.latte, ale pokdud ve složce žádné default.latte není, tak pokud někdo odmaže kus cesty vyhodí to chybu… není možné někde nastavit, že xyz.latte má být pro daný presenter považováno za default?

Díky

Marek Bartoš napsal(a):
>

Pročítám to ještě jednou a sice se ptáš na šablonu, ale vlastně chceš vědět na jaké jsi akci :)
Takže getAction() by nejspíš bylo přesnější.
Případně existuje ještě $this->isLinkCurrent(), pokud chceš rozlišit víc než jen akci https://doc.nette.org/…eating-links#…
Ale většinou je vhodnější kód pro určité akce psát do action metod. Pro akci end by to byla public function actionEnd()

Pepino
Člen | 249
+
0
-

@Laddy v routeru muzes nastavit aby defaultni akce byla naka jina. A btw neplet si sablony s akci.

Marek Bartoš
Nette Blogger | 1171
+
0
-

To že ti to vyhodí chybu je správně, dělá to jen v debug módu. Když nebude existovat action/render metoda ani šablona, tak se z ní v produkci stane 404.

Jinak nic ti nebrání <presenter> a <action> v routách vůbec nepoužívat, můžeš si pro každou akci napsat extra routu a určit, na jakou akci vede.

Ale doporučil bych ti dělat presentery jen s jednou akcí (default), je to tak přehlednější.

Editoval Marek Bartoš (4. 4. 2022 20:37)