PresenterRequest – zrušit final
- marau
- Člen | 50
Zdravím Netti,
dělám si vlastní databázový router, který mi routuje na různé presentery
podle infromací, které jsou obsaženy v databázi (pracky/automaticke/ –
CategoryPresenter, foto/dovolena/ – GalleryPresenter). Zároveň přímo
v routeru zjistím primaryKey patřičného záznamu a rád bych ho předal
přímo presenteru, nechci ho však ukládat v URL. Jako nejlepší mi přišel
přístup přes
<?php $presenter->request->primaryKey; ?>
, aktuální
implementace PresenterRequest mi však nedovolí před vlastní „skrytý
parametr“. Chtěl jsem si tedy implementovat vlastní PresenterRequest ale
ejhle, aktuální PresenterRequest je final a nelze z něj dědit. Lze toto
vyřešit jinak? Pokud ne, mohl bych požádat o zrušení final? Díky.
Editoval marau (9. 1. 2011 2:38)
- Ondřej Mirtes
- Člen | 1536
Tak ten parametr nazvi stejně, jako ten parametr, který ho představuje v URL. Takhle funguje FILTER_IN/FILTER_OUT pro převádění třeba mezi slugem a IDčkem. Ale pamatuj, že to musí fungovat oboustranně.
- Ondřej Mirtes
- Člen | 1536
V presenteru máš k dispozici $primaryId v metodách action* a render* jako vstupní parametr.
- marau
- Člen | 50
Ondřej Mirtes napsal(a):
V presenteru máš k dispozici $primaryId v metodách action* a render* jako vstupní parametr.
Pokud bych si nechal $primaryId nastavit do action a render, porušil bych tim koncept, pro který byl tento způsob odkazování navržen. Měl bych totiž následující:
public function actionDefault($url, $primaryId, $dalsiParametr, $jesteJiny, $aDalsi)
{
}
Pokud bych nyní chtěl vytvořit link, musel bych ručně zadávat názvy parametrů, $primaryId totiž niky nevyužiji (nastavuji ho pouze při routování).
- Vyki
- Člen | 388
Ondřej Mirtes napsal(a):
Tak ten parametr nazvi stejně, jako ten parametr, který ho představuje v URL. Takhle funguje FILTER_IN/FILTER_OUT pro převádění třeba mezi slugem a IDčkem. Ale pamatuj, že to musí fungovat oboustranně.
To je rozhodně nejčistší způsob jak se s tím vypořádat. Permalink si přeložit na id už v route table a v aplikaci používat už pouze id.
- Tharos
- Člen | 1030
Vyki: Ano, ale to předpokládá routování za pomocí
Nette\Application\Route
. Pokud někdo (z jakéhokoliv důvodu)
routuje přes svou vlastní implementaci Nette\Application\IRouter
,
je to docela jiná situace. Pak je IMHO nejlepší řešit to právě v metodě
constructUrl(…), anebo si implementovat vlastní filtrační mechanismus.