Cum se încarcă fișierul de configurare

Componentele individuale ale Nette sunt configurate cu ajutorul fișierelor de configurare. Vom arăta cum se încarcă aceste fișiere.

Dacă utilizați întregul cadru, nu este nevoie să faceți nimic altceva. În proiect, aveți un director config/ pregătit în prealabil pentru fișierele de configurare, iar încărcătorul de aplicații este responsabil pentru încărcarea acestora. Acest articol se adresează utilizatorilor care utilizează doar o singură bibliotecă Nette și doresc să profite de fișierele de configurare.

Fișierele de configurare sunt de obicei scrise în NEON și sunt cel mai bine editate în editori care oferă suport pentru acesta. Ele pot fi considerate ca fiind instrucțiuni privind modul de creare și configurare a obiectelor. Astfel, rezultatul încărcării unei configurații va fi o așa-numită fabrică, care este un obiect care va crea la cerere alte obiecte pe care doriți să le utilizați. De exemplu, o conexiune la o bază de date, etc.

Această fabrică se mai numește și container de injecție a dependențelor (DI container) și dacă vă interesează detaliile, citiți capitolul despre injecția dependențelor.

Încărcarea configurației și crearea containerului sunt gestionate de clasa Nette\Bootstrap\Configurator, așa că vom instala mai întâi pachetul său nette/bootstrap:

composer require nette/bootstrap

Și vom crea o instanță a clasei Configurator. Deoarece containerul DI generat va fi stocat pe disc, trebuie să setați calea către directorul în care va fi salvat:

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

Pe Linux sau macOS, setați permisiunile de scriere pentru directorul temp/.

Și ajungem la fișierele de configurare propriu-zise. Acestea se încarcă folosind addConfig():

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

Dacă doriți să adăugați mai multe fișiere de configurare, puteți apela funcția addConfig() de mai multe ori. În cazul în care în fișiere apar elemente cu aceleași chei, acestea vor fi suprascrise (sau fuzionate, în cazul array-urilor). Un fișier inserat ulterior are o prioritate mai mare decât cel anterior.

Ultimul pas constă în crearea unui container DI:

$container = $configurator->createContainer();

Și acesta va crea deja obiectele dorite pentru noi. De exemplu, dacă folosiți configurația pentru Nette Database, îi puteți cere să creeze conexiuni la baza de date:

$db = $container->getByType(Nette\Database\Connection::class);
// sau
$explorer = $container->getByType(Nette\Database\Explorer::class);
// sau la crearea de conexiuni multiple
$db = $container->getByName('database.main.connection');

Și acum puteți lucra cu baza de date!

Modul de dezvoltare vs. modul de producție

În modul de dezvoltare, containerul este actualizat automat ori de câte ori sunt modificate fișierele de configurare. În modul de producție, acesta este generat o singură dată, iar modificările nu sunt verificate. Așadar, modul de dezvoltare urmărește confortul maxim al programatorului, iar modul de producție urmărește performanța.

Selectarea modului se face prin autodetecție, astfel încât, de obicei, nu este nevoie să configurați sau să comutați manual nimic. Modul este de dezvoltare atunci când aplicația rulează pe o gazdă locală (adică adresa IP 127.0.0.1 sau ::1) și nu este prezent niciun proxy (adică antetul său HTTP). În caz contrar, se execută în modul de producție.

Dacă doriți să activați modul de dezvoltare în alte cazuri, cum ar fi programatorii care accesează de la o anumită adresă IP, utilizați setDebugMode():

$configurator->setDebugMode('23.75.345.200');
// se poate specifica, de asemenea, o matrice de adrese IP

Vă recomandăm cu siguranță să combinați adresa IP cu un cookie. Stocați un token secret, de exemplu secret1234, în cookie-ul nette-debug și, în acest fel, activați modul de dezvoltare pentru programatorii care accesează de la o anumită adresă IP și, de asemenea, aveți token-ul menționat în cookie:

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

De asemenea, puteți dezactiva complet modul de dezvoltare, chiar și pentru localhost:

$configurator->setDebugMode(false);

Parametrii

Puteți utiliza, de asemenea, parametri în fișierele de configurare, care sunt definiți în secțiunea parameters.

Aceștia pot fi, de asemenea, introduși din exterior folosind metoda addDynamicParameters():

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

Parametrul projectId poate fi referit în configurație cu ajutorul notației %projectId%.

versiune: 3.x