Kako naložiti konfiguracijsko datoteko

Posamezne komponente Nette nastavljamo s pomočjo konfiguracijskih datotek. Pokazali bomo, kako te datoteke nalagati.

Če uporabljate celotno ogrodje, ni treba storiti ničesar dodatnega. V projektu imate za konfiguracijske datoteke pripravljen imenik config/ in za njihovo nalaganje skrbi zavajalec aplikacije. Ta članek je za uporabnike, ki uporabljajo samo eno knjižnico Nette in želijo izkoristiti možnosti konfiguracijskih datotek.

Konfiguracijske datoteke se običajno pišejo v formatu NEON in se najbolje urejajo v urejevalnikih z njegovo podporo. Lahko jih razumemo kot navodila, kako ustvarjati in konfigurirati objekte. Torej bo rezultat nalaganja konfiguracije tako imenovana tovarna, kar je objekt, ki nam na zahtevo ustvari druge objekte, ki jih želimo uporabljati. Na primer povezavo s podatkovno bazo itd.

Tej tovarni se tudi reče dependency injection vsebnik (DI vsebnik) in če vas zanimajo podrobnosti, preberite poglavje o dependency injection.

Nalaganje konfiguracije in ustvarjanje vsebnika opravi razred Nette\Bootstrap\Configurator, zato najprej namestimo njegov paket nette/bootstrap:

composer require nette/bootstrap

In ustvarimo instanco razreda Configurator. Ker se bo generirani DI vsebnik predpomnil na disk, je treba nastaviti pot do imenika, kamor se bo shranjeval:

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

Na Linuxu ali macOS nastavite imeniku temp/ pravice za pisanje.

In pridemo do samih konfiguracijskih datotek. Te naložimo s pomočjo addConfig():

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

Če želimo dodati več konfiguracijskih datotek, lahko funkcijo addConfig() pokličemo večkrat. Če se v datotekah pojavijo elementi z enakimi ključi, bodo prepisani (ali v primeru polj združeni). Kasneje vstavljena datoteka ima višjo prioriteto kot prejšnja.

Zadnji korak je ustvarjanje DI vsebnika:

$container = $configurator->createContainer();

In ta nam bo že ustvaril zahtevane objekte. Če na primer uporabljate konfiguracijo za Nette Database, ga lahko prosite za ustvarjanje povezav s podatkovno bazo:

$db = $container->getByType(Nette\Database\Connection::class);
// ali
$explorer = $container->getByType(Nette\Database\Explorer::class);
// ali pri ustvarjanju več povezav
$db = $container->getByName('database.main.connection');

In zdaj lahko že delate s podatkovno bazo!

Razvojni vs produkcijski način

V razvojnem načinu se vsebnik samodejno posodablja ob vsaki spremembi konfiguracijskih datotek. V produkcijskem načinu se generira samo enkrat in spremembe se ne preverjajo. Razvojni je torej usmerjen v maksimalno udobje programerja, produkcijski pa v zmogljivost in ostro uvajanje.

Izbira načina se izvaja s samodejnim zaznavanjem, zato običajno ni treba ničesar konfigurirati ali ročno preklapljati. Način je razvojni takrat, ko je aplikacija zagnana na localhostu (tj. IP naslov 127.0.0.1 ali ::1) in ni prisotna proxy (tj. njena HTTP glava). Sicer teče v produkcijskem načinu.

Če želimo razvojni način omogočiti tudi v drugih primerih, na primer programerjem, ki dostopajo iz določenega IP naslova, uporabimo setDebugMode():

$configurator->setDebugMode('23.75.345.200');
// lahko se navede tudi polje IP naslovov

Vsekakor priporočamo kombiniranje IP naslova s piškotkom. V piškotek nette-debug shranimo skrivni žeton, npr. secret1234, in na ta način aktiviramo razvojni način za programerje, ki dostopajo iz določenega IP naslova in hkrati imajo v piškotku omenjeni žeton:

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

Razvojni način lahko tudi popolnoma izklopimo, tudi za localhost:

$configurator->setDebugMode(false);

Parametri

V konfiguracijskih datotekah lahko uporabljate tudi parametre, ki se definirajo v sekciji parameters.

Lahko jih vstavljate tudi od zunaj s pomočjo metode addDynamicParameters():

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

Na parameter projectId se lahko v konfiguraciji sklicujete z zapisom %projectId%.

različica: 3.x