Předávání „globálních“ parametrů do šablony

ales.k
Člen | 6
+
0
-

Ahoj,

mám objekt – například uživatele – se kterým chci pracovat na více stránkách (více presenterech) webu. Je tedy potřeba dostat tento objekt jako parametr do šablony.

A teď jak toho docílit správně?

1. Vytvořit si komponentu – v tu chvíli mi vyvstávají další nejasnosti:
1.1 Kde tuto komponentu vytvářet a předávat závislosti (nemůžu ji přece vytvářet v každém presenteru znovu a vytvářet ji v nějakém abstract presenteru mi nepřijde flexibilní)?
1.2 Jak komponenta pozná, na kterém presenteru se nachází? (třeba ji chci spouštět jen na určitých presenterech)
2. Použít něco jiného než je komponenta
2.1 Líbilo by se mi nastavit si nejaký „posluchač“ (dát mu závislosti přes DI), který ví, na kterém(ých) presenteru se má spustit a vložit parametry do šablony.

Díval jsem se na „životní cyklus presenteru“, zkusil jsem uživatele do šablony předávat v abstract presenteru (a ty presentery, na kterých to potřebuji z něho dědí) – ale nejsem s tím spokojen.

Případně pokud na to existuje nějaký balíček, tak můžete postnout odkaz.

Děkuji za všechny rady.

Editoval ales.k (22. 4. 2019 18:04)

Ondřej Kubíček
Člen | 486
+
0
-

a user je jen příklad? pokud ne, tak $user je k dispozici v šablonách automaticky
jinak nejjednodušší varianta je mít nějaký BasePresenter – společný předek pro presentery a tam setnout proměnou pro šablonu

Šaman
Člen | 2536
+
0
-

Komponenta se „spustí“ až když ji vykresluješ. Samotná metoda createComponentXxx() v presenteru nic nespouští. Takže není problém ji mít v nějakém předkovi a vykreslovat jen v některých šablonách.

Ale user není komponenta, jen proměnná. Když stačí proměnná, je komponenta zbytečny overkill.

A konkrétně ten $user už je v presenterech předem injectnutý, jak už psal Ondřej.

Editoval Šaman (22. 4. 2019 20:09)

ales.k
Člen | 6
+
0
-

No, přesnější by byl příklad nákupního košíku, který je v záhlaví webu, nebo určité sub-menu, které je jen na některých stránkách. Možná ještě lepší příklad – výpis 3 nejnovějších článků. Zkrátka něco, co je vypsáno na více stránkách, ale ne na všech.
A může to být i nějaká funkčnost, ne jen předání jednoho parametru do šablony (např to vytažení článků z DB, výpis submenu na základě přihlášeného uživatele/nebo dat v session apod.).

Znamená to tedy, že metoda createComponentXxx() nemusí být v presenteru uvedena a komponenta bude přesto fungovat při požadavku na vykreslení v šabloně?

Editoval ales.k (23. 4. 2019 7:00)

Ondřej Kubíček
Člen | 486
+
+1
-

tak to se ti hodí ta komponenta…
createComponentXxx() potřebuješ, nacpal bych to do toho BasePresenteru a pak to můžeš použít kdekoli…

MajklNajt
Člen | 374
+
0
-

prípadne si môžeš, ak to všetko nechceš tlačiť do BasePresenteru, vyrobiť traity (napr. 1 traita na 1 komponentu, kde si iba injectneš továrničku a napíšeš metódu createComponentXxx()), a tie si potom podľa potreby iba importneš v ktoromkoľvek presenteri