DI: Základní rozšíření pro kontejner

Balíček nette/di obsahuje několik rozšíření pro DI kontejner.

ExtensionsExtension

Díky tomuto rozšíření můžeme zaregistrovat další rozšiření pomocí konfiguračních NEON souborů.

extensions:
	dibi: Dibi\Bridges\Nette\DibiExtension22

Tímto způsobem přidáme rozšíření Dibi\Bridges\Nette\DibiExtension22 pod názvem dibi, takže následně ho konfigurujeme pod sekcí dibi:

dibi:
	host: localhost

Objektu rozšíření můžeme předat parametry přes konstruktor.

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

InjectExtension

Rozšíření umožňuje používat u služeb příznak inject: true, kterým se aktivuje předávání závislostí přes veřejné proměnné s anotací @inject a metody inject*.

services:
	blog.articles:
		factory: App\Model\Articles
		inject: true
namespace App\Model;

use Nette\Database\Connection;

class Articles
{
	/** @var Connection @inject */
	public $connection;
}

V základním nastavení je inject aktivováno pouze pro presentery.

DecoratorExtension

Dekorátor je rozšíření, pomocí kterého můžeme nastavit tagy nebo doplnit setup (např. volání metod) u všech služeb určité třídy nebo implementující určité rozhraní.

decorator:
	# klíč je název třídy nebo rozhraní
	App\Repository\AbstractRepository:
		setup:
			- setConnection
		inject: true

	App\Component\BaseControl:
		setup:
			- setTranslator(@mytranslator)
		tags: [view]

SearchExtension

Search rozšíření dokáže v zadaných složkách vyhledat třídy a automaticky je zaregistrovat jako služby.

search:
	# název sekce lze vynechat, pokud chcete vyhledávat pouze v jedné složce
	sekce:
		in: %appDir%/Forms
		# masky souborů, které se budou vyhledávat, výchozí je *.php
		files: ['*.php', '*.php5']
		# seznam masek, název třídy odpovídat aspoň jednomu z nich
		classes:
			- App\*Form
		# pouze třídy, které jsou potomky aspoň jedné z vyjmenovaných tříd budou zaregistrovány
		extends: Nette\Application\UI\Form
		# pouze třídy, které implementují aspoň jedno vyjmenované rozhraní budou zaregistrovány
		implements: []
		# pravidla pro vyřazení tříd z automatické registrace služeb
		exclude:
			classes: []
			extends: []
			implements: []
		# zaregistrované služby budou přidány s těmito tagy
		tags: []

PhpExtension

Přes toto rozšíření lze nastavovat direktivy PHP. Přehled všech direktiv naleznete na php.net.

php:
	date.timezone: Europe/Prague

ConstantsExtension

Rozšíření umožňuje definovat konstanty v PHP.

constants:
	FOOBAR: 'baz'

Po nastartování aplikace máme k dispozici konstantu FOOBAR.