Konfigurace DI kontejneru
Přehled konfiguračních voleb pro Nette DI kontejner.
Nette DI kontejner se snadno ovládá pomocí konfiguračních souborů. Ty se obvykle zapisují ve formátu NEON. K editaci doporučujeme editory s podporou tohoto formátu.
decorator: Dekorátor
di: DI kontejner
extensions: Instalace dalších DI rozšíření
includes: Vkládání souborů
parameters: Parametry
services: Služby
Chcete-li zapsat řetězec začínající znakem @
nebo obsahující %
, musíte znak
escapovat zdvojením na @@
nebo %%
.
Parametry
V konfiguraci můžete definovat parametry, které lze pak použít jako součást definic služeb. Čímž můžete zpřehlednit konfiguraci nebo sjednotit a vyčlenit hodnoty, které se budou měnit.
parameters:
dsn: 'mysql:host=127.0.0.1;dbname=test'
user: root
password: secret
Na parametr dsn
se odkážeme kdekoliv v konfiguraci zápisem %dsn%
. Parametry lze používat
i uvnitř řetězců jako '%wwwDir%/images'
.
Parametry nemusí být jen řetězce nebo čísla, mohou také obsahovat pole:
parameters:
mailer:
host: smtp.example.com
secure: ssl
user: franta@gmail.com
languages: [cs, en, de]
Na konkrétní klíč se odkážeme jako %mailer.user%
.
Pokud potřebujete ve vašem kódu, například třídě, zjistit hodnotu jakékoliv parametru, tak jej do této třídy předejte. Například v konstruktoru. Neexistuje žádný globální objekt představující konfiguraci, kterého by se třídy dotazovaly na hodnoty parametrů. To by bylo porušením principu dependency injection.
Služby
Viz samostatná kapitola.
Decorator
Jak upravit hromadně všechny služby určitého typu? Třeba zavolat určitou metodu u všech presenterů, které dědí od konkrétního společného předka? Od toho je tu decorator.
decorator:
# u všech služeb, co jsou instancí této třídy nebo rozhraní
App\Presenters\BasePresenter:
setup:
- setProjectId(10) # zavolej tuto metodu
- $absoluteUrls = true # a nastav proměnnou
Decorator se dá používat také pro nastavení tagů nebo zapnutí režimu inject.
decorator:
InjectableInterface:
tags: [mytag: 1]
inject: true
DI
Technické nastavení DI kontejneru.
di:
# zobrazit DIC v Tracy Bar?
debugger: ... # (bool) výchozí je true
# typy parametrů, které nikdy neautowirovat
excluded: ... # (string[])
# třída, od které dědí DI kontejner
parentClass: ... # (string) výchozí je Nette\DI\Container
Rozšíření
Registrace dalších DI rozšíření. Tímto způsobem přidáme např. DI rozšíření
Dibi\Bridges\Nette\DibiExtension22
pod názvem dibi
extensions:
dibi: Dibi\Bridges\Nette\DibiExtension22
Následně ho tedy konfigurujeme v sekci dibi
:
dibi:
host: localhost
Jako rozšíření lze přidat i třídu, která má parametry:
extensions:
application: Nette\Bridges\ApplicationDI\ApplicationExtension(%debugMode%, %appDir%, %tempDir%/cache)
Vkládání souborů
Další konfigurační soubory můžeme vložit v sekci includes
:
includes:
- parameters.php
- services.neon
- presenters.neon
Název parameters.php
není překlep, konfigurace může být zapsaná také v PHP souboru, který ji vrátí
jako pole:
<?php
return [
'database' => [
'main' => [
'dsn' => 'sqlite::memory:',
],
],
];
Pokud se v konfiguračních souborech objeví prvky se stejnými klíči, budou přepsány, nebo v případě polí sloučeny. Později vkládaný soubor má vyšší prioritu než předchozí. Soubor, ve kterém
je sekce includes
uvedena, má vyšší prioritu než v něm vkládané soubory.
Slučování
Pokud se ve více konfiguračních souborech objeví prvky se stejnými klíči, budou přepsány, nebo v případě polí sloučeny. Později vkládaný soubor má vyšší prioritu než předchozí.
config1.neon | config2.neon | výsledek |
---|---|---|
|
|
|
U polí lze zabránit slučování uvedením vykřičníku za názvem klíče:
config1.neon | config2.neon | výsledek |
---|---|---|
|
|
|