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%
.