Nette Documentation Preview

syntax
Kako naložiti konfiguracijsko datoteko
**************************************

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

.[tip]
Č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 |application:bootstrap#DI Container Configuration].
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 |neon:format] in jih je najbolje urejati v [urejevalnikih s podporo zanj |best-practices:editors-and-tools#ide-editor]. 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 |dependency-injection:].

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

```shell
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:

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

V operacijskem sistemu Linux ali macOS nastavite [dovoljenja za pisanje za |nette:troubleshooting#Setting directory permissions] imenik `temp/`.

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

```php
$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 |dependency-injection:configuration#Merging] v primeru polj). Kasneje vstavljena datoteka ima višjo prioriteto kot prejšnja.

Zadnji korak je ustvarjanje vsebnika DI:

```php
$container = $configurator->createContainer();
```

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

```php
$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 .[#toc-development-vs-production-mode]
---------------------------------------------------------------------

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()`:

```php
$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:

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

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

```php
$configurator->setDebugMode(false);
```


Parametri .[#toc-parameters]
----------------------------

V konfiguracijskih datotekah lahko uporabite tudi parametre, ki so opredeljeni [v razdelku `parameters`  |dependency-injection:configuration#parameters`].

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

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

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


{{leftbar: nette:@menu-topics}}

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