Come caricare un file di configurazione
Le singole parti di Nette vengono impostate tramite file di configurazione. Vediamo come caricare questi file.
Se si utilizza l'intero framework, non è necessario fare altro. Nel progetto è presente una directory
config/
preimpostata per i file di configurazione, e il loro caricamento è gestito dal bootloader dell'applicazione. Questo
articolo è per gli utenti che utilizzano solo una libreria Nette e vogliono sfruttare le possibilità dei file di
configurazione.
I file di configurazione sono solitamente scritti in formato NEON e si modificano al meglio negli editor con supporto per esso. Possono essere visti come istruzioni su come creare e configurare oggetti. Quindi, il risultato del caricamento della configurazione sarà una cosiddetta factory, che è un oggetto che, su richiesta, ci creerà altri oggetti che vogliamo utilizzare. Ad esempio, connessioni al database, ecc.
Questa factory è anche chiamata dependency injection container (container DI) e se sei interessato ai dettagli, leggi il capitolo sulla dependency injection.
Il caricamento della configurazione e la creazione del container sono gestiti dalla classe Nette\Bootstrap\Configurator, quindi
installiamo prima il suo pacchetto nette/bootstrap
:
composer require nette/bootstrap
E creiamo un'istanza della classe Configurator
. Poiché il container DI generato verrà memorizzato nella cache su
disco, è necessario impostare il percorso della directory in cui verrà salvato:
$configurator = new Nette\Bootstrap\Configurator;
$configurator->setTempDirectory(__DIR__ . '/temp');
Su Linux o macOS, imposta i permessi di
scrittura per la directory temp/
.
E arriviamo ai file di configurazione stessi. Li carichiamo usando addConfig()
:
$configurator->addConfig(__DIR__ . '/database.neon');
Se vogliamo aggiungere più file di configurazione, possiamo chiamare la funzione addConfig()
più volte. Se nei
file compaiono elementi con le stesse chiavi, verranno sovrascritti (o, nel caso degli array, uniti). Il file inserito successivamente ha
una priorità maggiore rispetto al precedente.
L'ultimo passo è la creazione del container DI:
$container = $configurator->createContainer();
E questo ci creerà già gli oggetti richiesti. Se, ad esempio, utilizzi la configurazione per Nette Database, puoi chiedergli di creare le connessioni al database:
$db = $container->getByType(Nette\Database\Connection::class);
// oppure
$explorer = $container->getByType(Nette\Database\Explorer::class);
// oppure creando più connessioni
$db = $container->getByName('database.main.connection');
E ora puoi già lavorare con il database!
Modalità sviluppatore vs produzione
In modalità sviluppatore, il container si aggiorna automaticamente ad ogni modifica dei file di configurazione. In modalità produzione, viene generato solo una volta e le modifiche non vengono controllate. La modalità sviluppatore è quindi focalizzata sulla massima comodità del programmatore, la modalità produzione sulle prestazioni e sulla distribuzione in produzione.
La scelta della modalità avviene tramite autodetect, quindi di solito non è necessario configurare nulla o passare
manualmente. La modalità è sviluppatore se l'applicazione viene eseguita su localhost (cioè indirizzo IP 127.0.0.1
o ::1
) e non è presente una proxy (cioè la sua intestazione HTTP). Altrimenti, viene eseguita in modalità
produzione.
Se vogliamo abilitare la modalità sviluppatore anche in altri casi, ad esempio per i programmatori che accedono da un
indirizzo IP specifico, usiamo setDebugMode()
:
$configurator->setDebugMode('23.75.345.200');
// è possibile specificare anche un array di indirizzi IP
Raccomandiamo vivamente di combinare l'indirizzo IP con un cookie. Nel cookie nette-debug
salviamo un token
segreto, ad esempio secret1234
, e in questo modo attiviamo la modalità sviluppatore per i programmatori che
accedono da un indirizzo IP specifico e che hanno anche il token menzionato nel cookie:
$configurator->setDebugMode('secret1234@23.75.345.200');
Possiamo anche disabilitare completamente la modalità sviluppatore, anche per localhost:
$configurator->setDebugMode(false);
Parametri
Nei file di configurazione è possibile utilizzare anche parametri, che vengono definiti nella sezione parameters
.
Possono anche essere inseriti dall'esterno tramite il metodo addDynamicParameters()
:
$configurator->addDynamicParameters([
'remoteIp' => $_SERVER['REMOTE_ADDR'],
]);
Al parametro projectId
si può fare riferimento nella configurazione tramite la notazione
%projectId%
.