Jak zjistit Modul, Presenter, Action a parametry z route

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

Existuje v Nette nějaký způsob, jak zjistit z routy o jaký se jedná modul, presenter, action a jaké jsou parametry? Bohužel jsem nenašel žádnou metodu, která by tohle vracela.

Jod
Člen | 701
+
0
-

Aha:

// Vracia modul:presenter
$this->getName(); //alebo ->name

// Vracia action napr default
$this->getAction(); // alebo ->action
// Vracia view napr default
$this->getView(); // alebo ->view

// vracia url parametre
$this->getParams(); // alebo params
// vracia jeden parameter podla klúča id
$this->getParam('id');
Wosonj
Člen | 36
+
0
-

Špatně jsem to popsal – nepotřebuji to pro aktuální presenter, ale obecně.
Například z Admin:Tables:Show customers potřebuji získat, že zpracovávat to bude třída Admin_TablesPresenter, akce je ‚Show‘ a parametr ‚customers‘.

Zpracovává to Presenter::createRequest() jenže ta vrací už rovnou URL. Zpětně to z URL taky jednoduše získat nejde, protože to zase zpracovává IRouter::match(), který bere IHttpRequest, což je implementováno v HttpRequest tak, že bere aktuální URI…

Jod
Člen | 701
+
0
-

$this->getComponent(‚Admin:Tables‘)->class bude asi blbosť :D

Skúsa napísať konkrétnejšie načo to potrebuješ.

Editoval Jod (9. 3. 2009 14:10)

LM
Člen | 206
+
0
-

Presenter::createRequest() sice vrátí rovnou odkaz, ale odloží si vytvořený PresenterRequest do Presenter::$lastCreatedRequest takže:

$this->createRequest('Admin:Tables:Show'); // $this je presenter
$this->getLastCreatedRequest(); // vratí PresenterRequest kde je to co potřebuješ: presenter, action ...

Třídu z názvu presenteru ti odvodí PresenterLoader.

Wosonj
Člen | 36
+
0
-

LM napsal(a):

Presenter::createRequest() sice vrátí rovnou odkaz, ale odloží si vytvořený PresenterRequest do Presenter::$lastCreatedRequest takže:

$this->createRequest('Admin:Tables:Show'); // $this je presenter
$this->getLastCreatedRequest(); // vratí PresenterRequest kde je to co potřebuješ: presenter, action ...

Třídu z názvu presenteru ti odvodí PresenterLoader.

Super, funguje to, jenom se musí použít $this->link('Admin:Tables:Show');, protože Presenter::createRequest() je protected.

Potřebuji to jinak kvůli breadcrumbs – chci to dělat tak, že každá Action, která potřebuje použít bradcrumbs, zavolá metodu s cestou třeba array('Default:Default','Category:Default 18','Article:Detail 5',), která pak pro každou cestu zjistí správný presenter a zavolá v něm nějakou statickou metodu, která vrátí správný název stránky – takže výsledkem bude třeba Homepage → Hardware → Monitor XYZ