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.