Vlastní router – předání Entity do presenteru

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

Ahoj,

vytvořil jsem si vlastní router, který funguje následovně:

  • z (sub)domény zjistí, o jaký web (entita Site) se jedná
  • ze zjištěné entity Site, si ještě zjistí její defaultní jazyk (entita Language)
  • pokud pak uživatel napiše třeba: nasweb.eu/sk, a zjistí se, že daný web (Site) má defaultně slovenštinu, tak to /sk zahodí. Pokud se chce uživatel dostat pak třeba na anglickou verzi, tak dopíše /en, atd..
  • funguje to samozřejmě i tak, že pokud uživatel nezadá jazyk, tak se automaticky doplní ten defaultní

Z toho všeho vyplývá, že jsem si na základě URL našel entity Site a Language. Tyhle 2 entity bych pak chtěl předat do presenteru. Zkouším to přidat do parametrů přes $appRequest->setParameters(), ale tohle nefunguje. Vypadá to, že on potřebuje jen čisté pole složené ze stringů (popř. čísel).

Existuje nějaký jiný (čistý) způsob, jak si do presenteru předat ty 2 entity, které jsem již načetl v routeru?

Díky.

newPOPE
Člen | 648
+
0
-

Niekedy to určite išlo ale verziu ti nepoviem.

No dôležitejšie je, že to čo chceš nie je moc dobrý prístup. Síce to znie cool, „už som to nacital prečo by som to robil znovu“ ale cool to určite nie je.

Skôr by som sa v routeri snažil len čo najrýchlejšie overiť to čo potrebujem a načítanie dát/entít robil až tam kde je to v poriadku a to napr. Presenteri, sluzbe…

BuGeR
Člen | 45
+
0
-

No jo, to by bylo nejlepší.. ale já potřebuji to ověřování jazyka už v routeru, aby se budovaly správně URL po předání entity Language.

Oli
Člen | 1215
+
0
-

Máme to stejně. Pokud máš tu službu jako službu zaregistrovanou, tak stačí si tam vytvořit nějakou property. Protože DI ti vrátí pokaždé stejnou instanci, tak tam ten jazyk mít budeš.

Ideálně bych ten jazyk nastavoval v konstruktoru aby pak nešel za běhu změnit (pokud to z nějakého důvovu nepotřebuješ).

Pokud budeš mít víc těch služeb (pro každou část jednu) a ne jednu, tak na tom nevidím nic špatného.

newPOPE
Člen | 648
+
0
-

@oli ten dôvod pri multilangu môže prísť veľmi rýchlo a to s posielaním emailov z cli pokiaľ má user možnosť nastaviť si jazyk notifikácií.

Keď tak doporučujem factory na prekladac a do UI si len vytvoris na základe jazyka a nastaviť ho UI.

akadlec
Člen | 1326
+
0
-

Ad entity v routeru, před nette 2.4 sem používal tryCall modifikaci, která dokázala vytáhnout entitu z doctrine a tu dovézt do action/render/handle. Využívalo to anotace dané metody. Jenže po přechodu na 2.4 je to problém protože nette je více strict, takže entitu musím zpracovat už v routeru, takže filter in/out.

Tuhle „black magic“ jsem měl i pro persistentní parametry což je asi to co BuGer řeší?