Předání parametru z neonu, třídě vytvořené ve službě
- jEhLa
- Člen | 70
Zdravím,
mám model, který přes constructor dostává službu RepositoryManager, ta má
k dispozici připojení do databáze. Při přístupu k vlastnosti
RepositoryManageru, se podle názvu vlastnosti v metodě __get($name) vytvoří
požadované repository podle názvu a předá se mu připojení k db.
$articles = $this->repositoryManager->articles->findAll();
RepositoryManager tedy vrátí ArticlesRepository a na něm zavolá metodu findAll() která je zděděná z obecného Repository. Ta vratí EntityCollection a opět podle názvu repository vytvoří pole entit, v tomto případě Article.
$article = $this->repositoryManager->articles->getById(10);
Teď mi ArticlesRepository vrátí jen jednu entitu Article.
Teď bych chtěl na entitě zavolat metodu getImages(), která mi vrátí pole obrázků ve složce. K tomu však potřebuji entitě definovat, kde má ty obrázky hledat.
Nejlíp parametrem z config.neon. Jak jí to však předat? To mám až při
použití entity jí definovat setImagesDirectory($dir)? A když se jedná
o pole entit, tak je všechny znovu procházet a nastavovat složku?
Nebo si nadefinovat nějakou konstantu a v entitě hledat
v IMAGES_DIR.$articleDir? To se mi moc nelíbí.
Nebo jdu nato úplně špatně?
Děkuji
- Felix
- Nette Core | 1247
Hmmm, kdyz to mas takhle vsechno schovane za magii, tak budes potrebovat neco co ti do entity dosadi zavislosti.
Treba:
class Article {
function inject(FileStorage $storage) {
}
}
A tam bys mohl mit namapovano, ze entita Article ma tenhle/a/tenhle/path.
Takhle to ma treba LeanMapper a Nextras\ORM jestli se nepletu.
Aktualne me jine reseni nenapada.
- Felix
- Nette Core | 1247
To si musis doprogramovat udelej si treba RepositoryInjector, EntityInjector a inspiruj se treba u InjectExcetion.
Nebude to tak slozite nakonec. :-)
- jEhLa
- Člen | 70
Už jsem dohledal, zkusím asi něco jako tohle:
https://forum.nette.org/…cted-factory#…