Come caricare il file di configurazione

I singoli componenti di Nette sono configurati tramite file di configurazione. Mostriamo come caricare questi file.

Se si utilizza l'intero framework, non è necessario fare altro. Nel progetto, c'è una cartella preconfezionata config/ per i file di configurazione e il caricatore dell'applicazione è responsabile del loro caricamento. Questo articolo è rivolto agli utenti che utilizzano una sola libreria Nette e vogliono sfruttare i file di configurazione.

I file di configurazione sono di solito scritti in NEON e sono meglio modificati in editor che lo supportano. Possono essere considerati come istruzioni su come creare e configurare gli oggetti. Pertanto, il risultato del caricamento di una configurazione sarà un cosiddetto factory, ovvero un oggetto che creerà su richiesta altri oggetti che si desidera utilizzare. Per esempio, una connessione al database, ecc.

Questo factory è anche chiamato contenitore di iniezione di dipendenza (DI container) e, se si è interessati ai dettagli, si può leggere il capitolo sull'iniezione di dipendenza.

Il caricamento della configurazione e la creazione del contenitore sono gestiti dalla classe Nette\Bootstrap\Configurator, quindi installeremo prima il suo pacchetto nette/bootstrap:

composer require nette/bootstrap

e creare un'istanza della classe Configurator. Poiché il contenitore DI generato verrà memorizzato nella cache del disco, è necessario impostare il percorso della cartella in cui verrà salvato:

$configurator = new Nette\Bootstrap\Configurator;
$configurator->setTempDirectory(__DIR__ . '/temp');

Su Linux o macOS, impostare i permessi di scrittura per la cartella temp/.

E veniamo ai file di configurazione veri e propri. Questi vengono caricati usando addConfig():

$configurator->addConfig(__DIR__ . '/database.neon');

Se si vogliono aggiungere altri file di configurazione, si può chiamare la funzione addConfig() più volte. Se nei file compaiono elementi con le stesse chiavi, questi verranno sovrascritti (o uniti nel caso di array). Un file inserito successivamente ha una priorità maggiore rispetto al precedente.

L'ultimo passo consiste nel creare un contenitore DI:

$container = $configurator->createContainer();

E questo creerà già gli oggetti desiderati per noi. Ad esempio, se si utilizza la configurazione per Nette Database, si può chiedere di creare le connessioni al database:

$db = $container->getByType(Nette\Database\Connection::class);
// oppure
$explorer = $container->getByType(Nette\Database\Explorer::class);
// o quando si creano connessioni multiple
$db = $container->getByName('database.main.connection');

E ora si può lavorare con il database!

Modalità di sviluppo e modalità di produzione

In modalità di sviluppo, il contenitore viene aggiornato automaticamente ogni volta che i file di configurazione vengono modificati. In modalità di produzione, viene generato solo una volta e le modifiche non vengono controllate. Quindi la modalità sviluppatore mira alla massima comodità per il programmatore, mentre la modalità produzione mira alle prestazioni.

La selezione della modalità avviene tramite il rilevamento automatico, quindi di solito non è necessario configurare o cambiare manualmente nulla. La modalità è di sviluppo quando l'applicazione è in esecuzione su un localhost (cioè, l'indirizzo IP 127.0.0.1 o ::1) e non è presente alcun proxy (cioè, la sua intestazione HTTP). Altrimenti viene eseguita in modalità di produzione.

Se si vuole abilitare la modalità di sviluppo in altri casi, come per i programmatori che accedono da un indirizzo IP specifico, utilizzare setDebugMode():

$configurator->setDebugMode('23.75.345.200');
// è possibile specificare anche un array di indirizzi IP

Si consiglia di combinare l'indirizzo IP con un cookie. Memorizzate un token segreto, ad esempio secret1234, nel cookie nette-debug: in questo modo abiliterete la modalità di sviluppo per i programmatori che accedono da un indirizzo IP specifico e avrete anche il token indicato nel cookie:

$configurator->setDebugMode('secret1234@23.75.345.200');

Si può anche disabilitare del tutto la modalità sviluppatore, anche per localhost:

$configurator->setDebugMode(false);

Parametri

Nei file di configurazione si possono usare anche dei parametri, definiti nella sezione parameters.

Possono anche essere inseriti dall'esterno con il metodo addDynamicParameters():

$configurator->addDynamicParameters([
	'remoteIp' => $_SERVER['REMOTE_ADDR'],
]);

Il parametro projectId può essere referenziato nella configurazione con la notazione %projectId%.

versione: 3.x