Nette Documentation Preview

syntax
DI konténer konfigurálása
*************************

.[perex]
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 |neon:format] írják. A szerkesztéshez [olyan szerkesztőket |best-practices:editors-and-tools#ide-editor] ajánlunk használni [, amelyek támogatják |best-practices:editors-and-tools#ide-editor] ezt a formátumot.

<pre>
"decorator .[prism-token prism-atrule]":[#Decorator]: 	"Díszítő: .[prism-token prism-comment]"<br>
"di .[prism-token prism-atrule]":[#DI]: 			"DI Container .[prism-token prism-comment]"<br>
"extensions .[prism-token prism-atrule]":[#Extensions]: 	"További DI-bővítmények telepítése .[prism-token prism-comment]"<br>
"includes .[prism-token prism-atrule]":[#Including files]: 	"Beleértve a fájlokat .[prism-token prism-comment]"<br>
"parameters .[prism-token prism-atrule]":[#Parameters]: 	"Paraméterek .[prism-token prism-comment]"<br>
"search .[prism-token prism-atrule]":[#Search]: 		"Automatikus szolgáltatás regisztráció .[prism-token prism-comment]"<br>
"services .[prism-token prism-atrule]":[services]: 		"Szolgáltatások .[prism-token prism-comment]"
</pre>

A `%`, you must escape it by doubling it to `%%` karaktert tartalmazó karakterlánc írása. .[note]


Paraméterek .[#toc-parameters]
==============================

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.

```neon
parameters:
	dsn: 'mysql:host=127.0.0.1;dbname=test'
	user: root
	password: secret
```

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:

```neon
parameters:
	mailer:
		host: smtp.example.com
		secure: ssl
		user: franta@gmail.com
	languages: [cs, en, de]
```

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 .[#toc-services]
===============================

Lásd a [külön fejezetet |services].


Díszítő .[#toc-decorator]
=========================

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.

```neon
decorator:
	# minden olyan szolgáltatáshoz, amely ennek az osztálynak vagy interfésznek a példánya.
	App\UI\BasePresenter:
		setup:
			- # hívja meg ezt a metódust
			- $absoluteUrls = true # és állítsuk be a változót
```

A dekorátor használható [címkék |services#Tags] beállítására vagy az [injektálási mód |services#Inject Mode] bekapcsolására is.

```neon
decorator:
	InjectableInterface:
		tags: [mytag: 1]
		inject: true
```


DI
===

A DI konténer technikai beállításai.

```neon
di:
	# mutatja a DIC-et a Tracy Barban?
	debugger: ...        # (bool) alapértelmezés szerint true

	# olyan paramétertípusok, amelyeket soha nem kapcsolsz be automatikusan
	excluded: ...        # (string[])

	# az osztály, amelytől a DI konténer örököl.
	parentClass: ...     # (string) alapértelmezett értéke Nette\DI\Container
```


Metaadatok exportálása .[#toc-metadata-export]
----------------------------------------------

A DI konténer osztály is sok metaadatot tartalmaz. Ezt csökkentheti a metaadatok exportjának csökkentésével.

```neon
di:
	export:
		# paraméterek exportálása?
		parameters: false   # (bool) alapértelmezett értéke true

		# exportálni a címkéket és melyeket?
		tags:               # (string[]|bool) az alapértelmezett az all
			- event.subscriber

		# exportálja az autowiring adatait és melyiket?
		types:              # (string[]|bool) az alapértelmezett az all
			- Nette\Database\Connection
			- Symfony\Component\Console\Application
```

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 |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 |application:bootstrap] a `Nette\Application\Application`), akkor a `false` segítségével teljesen letilthatja az exportot.


Bővítések .[#toc-extensions]
============================

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:

```neon
extensions:
	dibi: Dibi\Bridges\Nette\DibiExtension22
```

Ezután konfiguráljuk a szintén `dibi` nevű szekciójában:

```neon
dibi:
	host: localhost
```

Hozzáadhatunk egy bővítmény osztályt is paraméterekkel:

```neon
extensions:
	application: Nette\Bridges\ApplicationDI\ApplicationExtension(%debugMode%, %appDir%, %tempDir%/cache)
```


Beleértve a fájlokat .[#toc-including-files]
============================================

További konfigurációs fájlokat lehet beilleszteni a `includes` szakaszba:

```neon
includes:
	- parameters.php
	- services.neon
	- presenters.neon
```

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:

```php
<?php
return [
	'database' => [
		'main' => [
			'dsn' => 'sqlite::memory:',
		],
	],
];
```

Ha a konfigurációs fájlokban azonos kulcsú elemek jelennek meg, akkor azok [felülíródnak, vagy |#Merging] tömbök esetén [összevonásra |#Merging] 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 .[#toc-search]
======================

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:

```neon
search:
	-	in: %appDir%/Forms
	-	in: %appDir%/Model
```

Általában azonban nem akarjuk az összes osztályt és interfészt felvenni, így szűrhetjük őket:

```neon
search:
	-	in: %appDir%/Forms

		# szűrés fájlnév alapján (string|string[])
		files:
			- *Factory.php

		# szűrés osztálynév alapján (string|string[])
		classes:
			- *Factory
```

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:


```neon
search:
	-	in: %appDir%
		extends:
			- App\*Form
		implements:
			- App\*FormInterface
```

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:

```neon
search:
	-	in: %appDir%
		exclude:
fájlok: ...
			classes: ...
			extends: ...
			implements: ...
```

A hozzáadott szolgáltatásokhoz címkéket lehet beállítani:

```neon
search:
	-	in: %appDir%
		tags: ...
```


Összevonás .[#toc-merging]
==========================

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.

<table class=table>
<tr>
	<th width=33%>config1.neon</th>
	<th width=33%>config2.neon</th>
	<th>result</th>
</tr>
<tr>
	<td>
```neon
items:
	- 1
	- 2
```
	</td>
	<td>
```neon
items:
	- 3
```
	</td>
	<td>
```neon
items:
	- 1
	- 2
	- 3
```
	</td>
</tr>
</table>

Egy adott tömb összevonásának megakadályozásához használjon felkiáltójelet a tömb neve után:

<table class=table>
<tr>
	<th width=33%>neon</th>
	<th width=33%>config2.neon</th>
	<th>eredmény</th>
</tr>
<tr>
	<td>
```neon
items:
	- 1
	- 2
```
	</td>
	<td>
```neon
items!:
	- 3
```
	</td>
	<td>
```neon
items:
	- 3
```
	</td>
</tr>
</table>

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.

parameters:
	dsn: 'mysql:host=127.0.0.1;dbname=test'
	user: root
	password: secret

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:

parameters:
	mailer:
		host: smtp.example.com
		secure: ssl
		user: franta@gmail.com
	languages: [cs, en, de]

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.

decorator:
	# minden olyan szolgáltatáshoz, amely ennek az osztálynak vagy interfésznek a példánya.
	App\UI\BasePresenter:
		setup:
			- # hívja meg ezt a metódust
			- $absoluteUrls = true # és állítsuk be a változót

A dekorátor használható címkék beállítására vagy az injektálási mód bekapcsolására is.

decorator:
	InjectableInterface:
		tags: [mytag: 1]
		inject: true

DI

A DI konténer technikai beállításai.

di:
	# mutatja a DIC-et a Tracy Barban?
	debugger: ...        # (bool) alapértelmezés szerint true

	# olyan paramétertípusok, amelyeket soha nem kapcsolsz be automatikusan
	excluded: ...        # (string[])

	# az osztály, amelytől a DI konténer örököl.
	parentClass: ...     # (string) alapértelmezett értéke Nette\DI\Container

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.

di:
	export:
		# paraméterek exportálása?
		parameters: false   # (bool) alapértelmezett értéke true

		# exportálni a címkéket és melyeket?
		tags:               # (string[]|bool) az alapértelmezett az all
			- event.subscriber

		# exportálja az autowiring adatait és melyiket?
		types:              # (string[]|bool) az alapértelmezett az all
			- Nette\Database\Connection
			- Symfony\Component\Console\Application

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:

extensions:
	dibi: Dibi\Bridges\Nette\DibiExtension22

Ezután konfiguráljuk a szintén dibi nevű szekciójában:

dibi:
	host: localhost

Hozzáadhatunk egy bővítmény osztályt is paraméterekkel:

extensions:
	application: Nette\Bridges\ApplicationDI\ApplicationExtension(%debugMode%, %appDir%, %tempDir%/cache)

Beleértve a fájlokat

További konfigurációs fájlokat lehet beilleszteni a includes szakaszba:

includes:
	- parameters.php
	- services.neon
	- presenters.neon

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:

<?php
return [
	'database' => [
		'main' => [
			'dsn' => 'sqlite::memory:',
		],
	],
];

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.

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:

search:
	-	in: %appDir%/Forms
	-	in: %appDir%/Model

Általában azonban nem akarjuk az összes osztályt és interfészt felvenni, így szűrhetjük őket:

search:
	-	in: %appDir%/Forms

		# szűrés fájlnév alapján (string|string[])
		files:
			- *Factory.php

		# szűrés osztálynév alapján (string|string[])
		classes:
			- *Factory

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:

search:
	-	in: %appDir%
		extends:
			- App\*Form
		implements:
			- App\*FormInterface

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:

search:
	-	in: %appDir%
		exclude:
fájlok: ...
			classes: ...
			extends: ...
			implements: ...

A hozzáadott szolgáltatásokhoz címkéket lehet beállítani:

search:
	-	in: %appDir%
		tags: ...

Ö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
items:
	- 1
	- 2
items:
	- 3
items:
	- 1
	- 2
	- 3

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
items:
	- 1
	- 2
items!:
	- 3
items:
	- 3