Kako naložiti konfiguracijsko datoteko

Posamezne komponente sistema Nette se konfigurirajo s konfiguracijskimi datotekami. Prikazali bomo, kako naložiti te datoteke.

Če uporabljate celotno ogrodje, vam ni treba storiti ničesar drugega. V projektu imate vnaprej pripravljen imenik config/ za konfiguracijske datoteke, za njihovo nalaganje pa je odgovoren nalagalnik aplikacije. Ta članek je namenjen uporabnikom, ki uporabljajo samo eno knjižnico Nette in želijo izkoristiti prednosti konfiguracijskih datotek.

Konfiguracijske datoteke so običajno napisane v jeziku NEON in jih je najbolje urejati v urejevalnikih s podporo zanj. Lahko si jih predstavljamo kot navodila za ustvarjanje in konfiguriranje objektov. Tako bo rezultat nalaganja konfiguracije tako imenovana tovarna, ki je objekt, ki bo na zahtevo ustvaril druge objekte, ki jih želite uporabiti. Na primer povezavo s podatkovno bazo itd.

Ta tovarna se imenuje tudi kontejner za vbrizgavanje odvisnosti (DI container) in če vas zanimajo podrobnosti, preberite poglavje o vbrizgavanju odvisnosti.

Za nalaganje konfiguracije in ustvarjanje vsebnika skrbi razred Nette\Bootstrap\Configurator, zato bomo najprej namestili njegov paket nette/bootstrap:

composer require nette/bootstrap

In ustvarimo primerek razreda Configurator. Ker bo ustvarjeni vsebnik DI shranjen v predpomnilniku na disku, morate določiti pot do imenika, kamor bo shranjen:

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

V operacijskem sistemu Linux ali macOS nastavite dovoljenja za pisanje za imenik temp/.

Nato preidemo na same konfiguracijske datoteke. Te se naložijo z uporabo addConfig():

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

Če želite dodati več konfiguracijskih datotek, lahko funkcijo addConfig() pokličete večkrat. Če se v datotekah pojavijo elementi z istimi ključi, se prepišejo (ali združijo v primeru polj). Kasneje vstavljena datoteka ima višjo prioriteto kot prejšnja.

Zadnji korak je ustvarjanje vsebnika DI:

$container = $configurator->createContainer();

In ta bo že ustvaril želene predmete za nas. Če na primer uporabljate konfiguracijo za podatkovno zbirko Nette, jo lahko prosite, naj ustvari povezave s podatkovno zbirko:

$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 delate s podatkovno zbirko!

Razvojni in produkcijski način

V razvojnem načinu se vsebnik samodejno posodablja ob vsaki spremembi konfiguracijskih datotek. V produkcijskem načinu se ustvari samo enkrat, spremembe pa se ne preverjajo. Razvojni način je torej namenjen čim večjemu programerskemu udobju, produkcijski način pa zmogljivosti.

Izbira načina poteka s samodejnim zaznavanjem, zato običajno ni treba ničesar konfigurirati ali ročno preklapljati. Način je razvojni, kadar aplikacija teče na lokalnem gostitelju (tj. na naslovu IP 127.0.0.1 ali ::1) in ni prisoten noben posrednik (tj. njegova glava HTTP). V nasprotnem primeru deluje v produkcijskem načinu.

Če želite omogočiti razvojni način v drugih primerih, na primer pri programerjih, ki dostopajo z določenega naslova IP, uporabite setDebugMode():

$configurator->setDebugMode('23.75.345.200');
// lahko se določi tudi niz naslovov IP.

Vsekakor priporočamo kombinacijo naslova IP s piškotkom. V piškotek nette-debug shranite skrivni žeton, npr. secret1234, in tako omogočite razvojni način za programerje, ki dostopajo z določenega naslova IP in imajo v piškotku naveden tudi žeton:

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

Razvojni način lahko tudi popolnoma onemogočite, tudi za lokalni gostitelj:

$configurator->setDebugMode(false);

Parametri

V konfiguracijskih datotekah lahko uporabite tudi parametre, ki so opredeljeni v razdelku parameters.

Lahko jih vstavite tudi od zunaj z uporabo metode addDynamicParameters():

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

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

različica: 3.x