Configurazione del contenitore DI
Panoramica delle opzioni di configurazione del contenitore Nette DI.
File di configurazione
Il contenitore Nette DI può essere controllato facilmente tramite file di configurazione. Di solito sono scritti in formato NEON. Per la modifica si consiglia di utilizzare editor che supportino questo formato.
decorator: Decoratore
di: Contenitore DI
extensions: Installa estensioni DI aggiuntive
includes: File di inclusione
parameters: Parametri
search: Registrazione automatica dei servizi
services: Servizi
Per scrivere una stringa contenente il carattere %
, you must escape it by doubling it to
%%
.
Parametri
È possibile definire dei parametri che possono essere utilizzati come parte delle definizioni dei servizi. Questo può aiutare a separare i valori che si desidera modificare più regolarmente.
È possibile fare riferimento al parametro foo
tramite %foo%
in qualsiasi altro punto del file di
configurazione. Possono anche essere usati all'interno di stringhe come '%wwwDir%/images'
.
Non è necessario che i parametri siano solo stringhe, possono anche essere valori di array:
Si può fare riferimento a una singola chiave come %mailer.user%
.
Se è necessario ottenere il valore di un parametro nel codice, ad esempio nella classe, passarlo a questa classe. Per esempio, nel costruttore. Non esiste un oggetto di configurazione globale che possa essere interrogato dalle classi per ottenere i valori dei parametri. Ciò sarebbe contrario al principio dell'iniezione di dipendenza.
Servizi
Si veda il capitolo separato.
Decoratore
Come modificare in blocco tutti i servizi di un certo tipo? È necessario chiamare un certo metodo per tutti i presentatori che ereditano da un particolare antenato comune? Ecco dove nasce il decoratore.
Il decoratore può essere usato anche per impostare i tag o attivare la modalità inject.
DI
Impostazioni tecniche del contenitore DI.
Servizi per i pigri
L'impostazione di lazy: true
consente la creazione pigra (differita) dei servizi. Ciò significa che i servizi
non vengono creati quando vengono richiesti dal contenitore DI, ma solo al loro primo utilizzo. Questo può accelerare l'avvio
dell'applicazione e ridurre l'uso della memoria, poiché vengono creati solo i servizi necessari per una specifica richiesta.
Per un servizio specifico, la creazione pigra può essere regolata.
Gli oggetti lazy possono essere utilizzati solo per le classi definite dall'utente, non per le classi interne di PHP. Richiede PHP 8.4 o più recente.
Esportazione di metadati
Anche la classe contenitore DI contiene molti metadati. È possibile ridurli riducendo l'esportazione dei metadati.
Se non si usa l'array $container->getParameters()
, si può disabilitare l'esportazione dei parametri. Inoltre,
si possono esportare solo i tag attraverso i quali si ottengono servizi con il metodo
$container->findByTag(...)
. Se non si chiama affatto il metodo, si può disabilitare completamente l'esportazione
dei tag con false
.
È possibile ridurre in modo significativo i metadati per il cablaggio automatico, specificando
le classi utilizzate come parametro del metodo $container->getByType()
. E ancora, se non si chiama affatto il
metodo (o solo in bootstrap per ottenere
Nette\Application\Application
), si può disabilitare completamente l'esportazione con false
.
Estensioni
Registrazione di altre estensioni DI. In questo modo si aggiunge, ad esempio, l'estensione DI
Dibi\Bridges\Nette\DibiExtension22
con il nome dibi
:
Poi la configuriamo nella sua sezione chiamata anche dibi
:
Si può anche aggiungere una classe di estensione con parametri:
Includere i file
È possibile inserire file di configurazione aggiuntivi nella sezione includes
:
Il nome parameters.php
non è un refuso, la configurazione può essere scritta anche in un file PHP, che la
restituisce come array:
Se all'interno dei file di configurazione compaiono elementi con le stesse chiavi, questi verranno sovrascritti o uniti nel caso di array. Il file incluso successivamente ha una priorità maggiore
rispetto al precedente. Il file in cui è elencata la sezione includes
ha una priorità maggiore rispetto ai file
inclusi in esso.
Ricerca
L'aggiunta automatica di servizi al contenitore DI rende il lavoro estremamente piacevole. Nette aggiunge automaticamente i presentatori al contenitore, ma è possibile aggiungere facilmente qualsiasi altra classe.
Basta specificare in quali directory (e sottodirectory) devono essere cercate le classi:
Di solito, però, non vogliamo aggiungere tutte le classi e le interfacce, quindi possiamo filtrarle:
Oppure possiamo selezionare le classi che ereditano o implementano almeno una delle seguenti classi:
Si possono anche definire regole negative, cioè maschere di nomi di classi o antenati e, se sono conformi, il servizio non sarà aggiunto al contenitore DI:
I tag possono essere impostati per i servizi aggiunti:
Fusione
Se elementi con le stesse chiavi appaiono in più file di configurazione, questi verranno sovrascritti o uniti nel caso di array. Il file incluso più tardi ha una priorità maggiore.
config1.neon | config2.neon | risultato |
---|---|---|
Per impedire l'unione di un determinato array, utilizzare il punto esclamativo subito dopo il nome dell'array:
config1.neon | config2.neon | risultato |
---|---|---|