Nette Bootstrap
I singoli componenti di Nette si configurano con i file di configurazione. Mostreremo come caricare questi file.
Se usate tutto il framework, non serve fare altro. Il vostro progetto ha già pronta la directory
config/ per i file di configurazione e del loro caricamento si occupa il loader dell'applicazione. Questo
articolo è per chi usa una sola libreria di Nette e vuole sfruttare i file di configurazione.
I file di configurazione si scrivono di solito nel formato NEON e si modificano al meglio negli editor che lo supportano. Si possono considerare istruzioni su come creare e configurare gli oggetti. Il risultato del caricamento di una configurazione sarà quindi una cosiddetta factory, cioè un oggetto che crea su richiesta gli altri oggetti che volete usare. Per esempio una connessione al database ecc.
Questa factory si chiama anche dependency injection container (container DI) e, se vi interessano i dettagli, leggete il capitolo sulla dependency injection.
Del caricamento della configurazione e della creazione del container si occupa la classe Nette\Bootstrap\Configurator, quindi per prima
cosa installiamo il suo pacchetto nette/bootstrap:
composer require nette/bootstrap
E creiamo un'istanza della classe Configurator. Poiché il container DI generato verrà messo in cache su disco,
dovete impostare il percorso della directory in cui verrà salvato:
$configurator = new Nette\Bootstrap\Configurator;
$configurator->setTempDirectory(__DIR__ . '/temp');
Su Linux o macOS impostate i permessi di scrittura per la
directory temp/.
Ora arriviamo ai file di configurazione veri e propri. Li carichiamo con addConfig():
$configurator->addConfig(__DIR__ . '/database.neon');
Se volete aggiungere altri file di configurazione, potete chiamare la funzione addConfig() più volte. Se nei file
compaiono elementi con le stesse chiavi, verranno sovrascritti (oppure uniti nel caso degli array). Il file aggiunto
dopo ha la priorità su quello precedente.
L'ultimo passo è creare il container DI:
$container = $configurator->createContainer();
E questo creerà per noi gli oggetti desiderati. Se per esempio usate la configurazione di Nette Database, potete chiedergli di creare le connessioni al database:
$db = $container->getByType(Nette\Database\Connection::class);
// oppure
$explorer = $container->getByType(Nette\Database\Explorer::class);
// oppure quando si creano più connessioni
$db = $container->getByName('database.main.connection');
E ora potete lavorare con il database!
Modalità di sviluppo e modalità produzione
In modalità di sviluppo il container viene aggiornato automaticamente a ogni modifica dei file di configurazione. In modalità produzione viene generato una sola volta e le modifiche non vengono controllate. La modalità di sviluppo punta quindi alla massima comodità del programmatore, mentre quella di produzione si concentra sulle prestazioni e sul deploy in produzione.
La scelta della modalità avviene per rilevamento automatico, quindi di solito non serve configurare o cambiare nulla a mano.
La modalità è di sviluppo se l'applicazione gira su localhost (cioè con indirizzo IP 127.0.0.1 oppure
::1) e non è presente un proxy (cioè il suo header HTTP). Altrimenti gira in modalità produzione.
Se vogliamo attivare la modalità di sviluppo anche in altri casi, per esempio per i programmatori che accedono da un
indirizzo IP determinato, usate setDebugMode():
$configurator->setDebugMode('23.75.345.200');
// si può indicare anche un array di indirizzi IP
Consigliamo vivamente di combinare l'indirizzo IP con un cookie. Salvate nel cookie nette-debug un token segreto,
per esempio secret1234. In questo modo attivate la modalità di sviluppo per i programmatori che accedono da un
determinato indirizzo IP e hanno nel cookie il token indicato:
$configurator->setDebugMode('secret1234@23.75.345.200');
Possiamo anche disattivare del tutto la modalità di sviluppo, perfino per localhost:
$configurator->setDebugMode(false);
Parametri
Nei file di configurazione potete usare anche i parametri, che si definiscono nella sezione parameters.
Si possono anche inserire dall'esterno con il metodo addDynamicParameters():
$configurator->addDynamicParameters([
'remoteIp' => $_SERVER['REMOTE_ADDR'],
]);
Al parametro remoteIp si può fare riferimento nella configurazione con la notazione %remoteIp%.
Se state aggiornando a una versione più recente, guardate la pagina aggiornamento.