Nette Documentation Preview

syntax
Konfigurace DI kontejneru
*************************

.[perex]
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.

<pre>
"decorator .[prism-token prism-atrule]":[#decorator]: 	"Dekorátor .[prism-token prism-comment]"<br>
"di .[prism-token prism-atrule]":[#DI]: 			"DI kontejner .[prism-token prism-comment]"<br>
"extensions .[prism-token prism-atrule]":[#Rozšíření]: 	"Instalace dalších DI rozšíření .[prism-token prism-comment]"<br>
"includes .[prism-token prism-atrule]":[#Vkládání souborů]: 	"Vkládání souborů .[prism-token prism-comment]"<br>
"parameters .[prism-token prism-atrule]":[#parametry]: 	"Parametry .[prism-token prism-comment]"<br>
"services .[prism-token prism-atrule]":[services]: 		"Služby .[prism-token prism-comment]"<br>
</pre>

Chcete-li zapsat řetězec začínající znakem `@` nebo obsahující `%`, musíte znak escapovat zdvojením na `@@` nebo `%%`. .[note]


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.

```neon
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:

```neon
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|services].


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.

```neon
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ů|services#Tagy] nebo zapnutí režimu [inject|services#Režim Inject].

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


DI
===

Technické nastavení DI kontejneru.

```neon
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`

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

Následně ho tedy konfigurujeme v sekci `dibi`:

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

Jako rozšíření lze přidat i třídu, která má parametry:

```neon
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`:

```neon
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
<?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 |#Slučování]. 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í.

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

U polí lze zabránit slučování uvedením vykřičníku za názvem klíče:

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

{{maintitle: Konfigurace Dependency Injection}}

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

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