Dynamické vloženie kódu do BasePresenteru
- MajklNajt
- Člen | 498
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
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
@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
BaseFrontPresenter
u si ich injectujem podľa spoločného
interface a createComponent
potom iba iteruje cez
providerov :)