Parametr z URL pro službu
- Milo
- Nette Core | 1283
Jak vytáhnout parametr z URL pro konstruktor služby v DI?
Konkrétně parametr lang
pro službu Language
,
kterou využívají jiné služby a továrničky komponent. Pokud je jazyk
v query stringu, dá se vytáhnout pomocí
Nette\Http\Request::getQuery('lang')
, ale když je schovaný
v URL, třeba example.com/en/homepage
, musel bych znovu matchovat
routy, a to se mi nechce, a pak použít
Nette\Application\Request::getParameter('lang')
.
Nějaký tip?
- David Matějka
- Moderator | 6445
blbě :)
- nastavovat to někde v base presenteru té službě přes setter
- (externí) listener na Application::onRequest a tam ten parametr nastavovat té službě
- závislost Language na Application a z toho vytáhnout aktuální request (nebo presenter)
ale nic z toho není ideální a závisí na stavu té aplikace
- David Grudl
- Nette Core | 8218
Router je prostý serializátor/deserializátor URL, Http\Request i App\Request jsou přenosky na data, které parametrům jako je lang nedávají žádný sémantický význam, rozklíčovává je až presenter. Tam bych to asi řešil.
- Milo
- Nette Core | 1283
V případě jazyku mi to tak nepřijde. Anglická a česká aplikace by mohly být úplně samostatné, takže jazyk beru jako parametr prostředí. Tím, že se jazyk přenáší v URL, se mixují parametry prostředí a aplikace. Proto bych se k jazyku chtěl dostat co nejdříve.
V praxi bude asi setup v onRequest
stačit. První výstup jde
až z prezenteru.