Jak přidat proměnou do template globálně?
- h4kuna
- Backer | 740
Ahoj,
potřeboval bych pomoci jak přidat proměnou do objektu Template.
Proměnou chci mít dostupnou všude, v presenterech, komponentách, mailech aj.
Vím že existuje rozhraní ITemplateFactory, ale píšu rozšíření, které definuje makra a pro správný běh vyžaduji mít přítomnost objektu v šabloně. A když si napíšu vlastní TemplateFactory, tak to může kolidovat s tím že někdo bude mít vlastní TemplateFactory a já mu ho přetížím nebo obráceně a bude dohledávat proč to nejde. Takže to taky nechci doplňkem vytvářet továrničku na template když vlastně neznám potřeby projektu.
Psát traitu je taky nedokonalý. Je to jen zmírnění definovat proměnou všude kde ji budu potřebovat (maily, komponenty, presentery). Makra jsou dostupná všude, ale jak nasetovat proměnou jsem nenašel.
Přijde mi hloupý do manuálu psát pokud chceš tehle doplněk použít tak si nezapomeň nasetovat tuhle proměnnou makra s tím počítají a musí to bejt tenhle objekt.
S proměnou kterou bych si definoval pracují jen makra, programátor by ji viděl, ale neměl by s ní pracovat, takže si mohu zvolit nekolidující název.
Líbilo by se mi, aby rozhraní ITemplateFactory definovalo metodu na přidávání proměnných. Stejně jako jsou globální $user, $control aj…
Jak to řešíte vy? Přehlídnul jsem jinou možnost?
EDIT
Po úpravě rozhraní by TemplateFactory mohla vypadat pro představu takto.
Kdyby někdo měl vlastní TemplateFactory, tak by doplněk nepřestal fungovat protože programátor by definoval tuto metodu addVariable($name, $value) kterou jsem přidal.
Editoval h4kuna (2. 6. 2016 11:02)
- David Matějka
- Moderator | 6445
Ja to hackuju pres filtr :) nejak takhle:
$builder->getDefinition('latte.latteFactory')
->addSetup('addFilter', ['getFoo', new Statement('function () { return $this->getService(?);}', ['fooService'])]);
a diky tomu to i bude lazy