Neon – extensions vs. services
- davidzaba
- Člen | 13
Rad bych se vas dotazal na upresneni pojmu v souboru config.neon:
1) extensions: (v PHP skrze
$container->addDefinition(…))
2) services: (v PHP skrze
$container->addService(…))
Oboji maji za ukol vstrikovat zavislosti napr. skrze znak @ v souboru typu NEON anebo napr. v konstruktoru tridy v souboru typu PHP. Oba typy tedy, nemylim-li se, funguji totozne. Jak se tedy pri zavadeni napr. noveho modelu rozhodnout, zda-li jej zaradim jako zavislost (EXTENSIONS) anebo sluzbu (SERVICES)?
Predem dekuji za odpovedi.
- enumag
- Člen | 2118
addDefinition není metoda třídy Container ale třídy ContainerBuilder. Podstatný rozdíl je ten že kód v addDefinition se provádí pouze compile-time a samotná služba je vytvořena jen když je třeba. Naproti tomu addService slouží pro dynamické přidávání tříd za běhu, čemuž je lépe se vyhnout. Osobně jsem addService nepoužil ještě nikdy, naopak addDefinition používám téměř denně.
- David Matějka
- Moderator | 6445
a jeste k services v neonu:
funguji v podstate stejne jako addDefinition v extension – pridaji definici
sluzby, ktera se vytvori az kdyz je potreba.
A kdy pouzit extension a kdy registrovat v neonu? extension je vhodny zejmena (ale nejen) pokud vytvaris nejaky znovupouzitelny doplnek (viz treba kdyby/doctrine) – v extension registrujes vsechny sluzby, co jsou potreba. Dokonce tam muzes projit vsechny registrovane sluzby a nejak je upravit, pripadne pridat nejaky PHP setup kod. To extension pak registrujes jednim radkem v neonu. Ale v ramci tveho projektu budes pravdepodobne pouzivat hlavne tu sekci services v neonu – je to snazsi registrovat tu sluzbu.