Dynamické vloženie kódu do BasePresenteru

MajklNajt
Člen | 498
+
0
-

Zdravím, mám 2 projekty, ktoré majú 90% spoločného kódu – mal som to síce rozdelené po moduloch, ale stále som musel pri zmene v jednom projekte ručne kopírovať zmeny do druhého projektu. Preto som sa rozhodol extrahovať tento spoločný kód do balíčkov a v projektoch nechať iba „vizuál“.

Tento spoločný kód aj individuálne veci pre každý projekt mám rozhodený do viacerých balíčkov, čiže som dosiahol to, že si aplikáciu poskladám iba cez composer a config.neon.

Problém mám jedine s BasePresenterom, konkrétne s továrničkami a metódami createComponent.... V pôvodnej architektúre som si z jednotlivých modulov importoval traity, kde som mal továrničky + metódy:

abstract class BaseFrontPresenter extends BasePresenter
{
	use Module1\TBaseFrontPresenter;
	use Module2\TBaseFrontPresenter;
}

Chcem však mať aj tento BaseFrontPresenter v „Core“ balíčku (keďže všetky presentery mám v balíčkoch a príde mi nelogické a divné, aby niečo v balíčku dedilo od niečoho, čo sa bude nachádzať v projekte), len neviem ako do neho dostať tie traity.

Existuje nejaký spôsob, ktorým by som ideálne v CompilerExtension každého balíčku vložil tie továrničky a metódy do BaseFrontPresenteru?

Editoval MajklNajt (9. 5. 2019 14:52)

David Matějka
Moderator | 6445
+
0
-

komponentu muzes pridat rucne pres $presenter->addComponent($component, $name), coz muzes dat do compiler extension jako setup na jednotlive presentery, ktere dedi od BaseFrontPresenteru

druhou moznosti je udelat si vlastni implementaci createComponent metody, aby komponenty hledalo i jinde, nez v prislusne createComponentXXX metode

MajklNajt
Člen | 498
+
0
-

@DavidMatějka díky za nakopnutie… tak som sa nakoniec vydal cestou preťaženia metódy createComponent – vytvoril som si v každom module providera (ktorý obsahuje továrničky a konkrétne createComponent... metódy), do BaseFrontPresenteru si ich injectujem podľa spoločného interface a createComponent potom iba iteruje cez providerov :)