DI konténer konfigurálása
A Nette DI konténer konfigurációs lehetőségeinek áttekintése.
Konfigurációs fájl
A Nette DI konténer könnyen vezérelhető a konfigurációs fájlok segítségével. Ezeket általában NEON formátumban írják. A szerkesztéshez olyan szerkesztőket ajánlunk használni , amelyek támogatják ezt a formátumot.
decorator: Díszítő:
di: DI Container
extensions: További DI-bővítmények telepítése
includes: Beleértve a fájlokat
parameters: Paraméterek
search: Automatikus szolgáltatás regisztráció
services: Szolgáltatások
A %
, you must escape it by doubling it to %%
karaktert tartalmazó
karakterlánc írása.
Paraméterek
Meghatározhat olyan paramétereket, amelyeket aztán a szolgáltatásdefiníciók részeként használhat. Ez segíthet elkülöníteni azokat az értékeket, amelyeket rendszeresebben szeretne módosítani.
A foo
paraméterre a %foo%
címen keresztül bármely konfigurációs fájlban hivatkozhat.
Használhatók a stringeken belül is, mint például a '%wwwDir%/images'
.
A paramétereknek nem csak karakterláncoknak kell lenniük, lehetnek tömbértékek is:
Egyetlen kulcsra hivatkozhat a %mailer.user%
.
Ha a kódodban, például az osztályodban szükséged van bármely paraméter értékére, akkor add át azt ennek az osztálynak. Például a konstruktorban. Nincs olyan globális konfigurációs objektum, amelyet az osztályok lekérdezhetnének a paraméterértékekért. Ez ellenkezne a függőségi injektálás elvével.
Szolgáltatások
Lásd a külön fejezetet.
Díszítő
Hogyan lehet egy bizonyos típusú összes szolgáltatást tömegesen szerkeszteni? Meg kell hívni egy bizonyos metódust egy adott közös őstől öröklődő összes bemutatóhoz? Erre szolgál a dekorátor.
A dekorátor használható címkék beállítására vagy az injektálási mód bekapcsolására is.
DI
A DI konténer technikai beállításai.
Metaadatok exportálása
A DI konténer osztály is sok metaadatot tartalmaz. Ezt csökkentheti a metaadatok exportjának csökkentésével.
Ha nem használja a $container->getParameters()
tömböt, kikapcsolhatja a paraméterek exportálását.
Továbbá csak azokat a címkéket exportálhatja, amelyeken keresztül a $container->findByTag(...)
módszerrel
szolgáltatásokat kap. Ha egyáltalán nem hívja meg a módszert, akkor a false
segítségével teljesen
letilthatja a címkék exportálását.
Jelentősen csökkentheti az autowiring metaadatait, ha
a $container->getByType()
metódus paramétereként megadja a használt osztályokat. És ismét, ha egyáltalán
nem hívja meg a metódust (vagy csak az application:bootstrap-ben a
Nette\Application\Application
), akkor a false
segítségével teljesen letilthatja az exportot.
Bővítések
Más DI-bővítmények regisztrálása. Így például a Dibi\Bridges\Nette\DibiExtension22
DI-bővítményt a
dibi
név alatt adjuk hozzá a név alatt:
Ezután konfiguráljuk a szintén dibi
nevű szekciójában:
Hozzáadhatunk egy bővítmény osztályt is paraméterekkel:
Beleértve a fájlokat
További konfigurációs fájlokat lehet beilleszteni a includes
szakaszba:
A parameters.php
név nem elírás, a konfiguráció egy PHP-fájlba is beírható, amely azt tömbként adja
vissza:
Ha a konfigurációs fájlokban azonos kulcsú elemek jelennek meg, akkor azok felülíródnak, vagy
tömbök esetén összevonásra kerülnek. A később bevont fájlnak magasabb prioritása van, mint
az előzőnek. Az a fájl, amelyben a includes
szakasz szerepel, magasabb prioritással rendelkezik, mint a benne
foglalt fájlok.
Keresés
A szolgáltatások automatikus hozzáadása a DI konténerhez rendkívül kellemes munkát tesz lehetővé. A Nette automatikusan hozzáadja az előadókat a konténerhez, de bármilyen más osztályokat is könnyen hozzáadhatunk.
Csak adjuk meg, hogy mely könyvtárakban (és alkönyvtárakban) kell keresni az osztályokat:
Általában azonban nem akarjuk az összes osztályt és interfészt felvenni, így szűrhetjük őket:
Vagy kiválaszthatjuk azokat az osztályokat, amelyek a következő osztályok közül legalább egyet örökölnek vagy implementálnak:
Meghatározhatunk negatív szabályokat is, azaz osztálynév maszkokat vagy ősöket, és ha ezek megfelelnek, a szolgáltatás nem kerül hozzá a DI konténerhez:
A hozzáadott szolgáltatásokhoz címkéket lehet beállítani:
Összevonás
Ha azonos kulcsú elemek több konfigurációs fájlban is megjelennek, akkor azok felülíródnak, vagy tömbök esetén egyesülnek. A később felvett fájlnak nagyobb prioritása van.
config1.neon | config2.neon | result |
---|---|---|
Egy adott tömb összevonásának megakadályozásához használjon felkiáltójelet a tömb neve után:
neon | config2.neon | eredmény |
---|---|---|