Nette Documentation Preview

syntax
Konfigurációs fájl betöltése
****************************

.[perex]
A Nette egyes összetevői konfigurációs fájlok segítségével kerülnek beállításra. Megmutatjuk, hogyan lehet betölteni ezeket a fájlokat.

.[tip]
Ha a teljes keretrendszert használja, nincs szükség semmi másra. A projektben van egy előre elkészített `config/` könyvtár a konfigurációs fájloknak, és az [alkalmazás betöltője |application:bootstrap#DI Container Configuration] felelős ezek betöltéséért.
Ez a cikk azoknak a felhasználóknak szól, akik csak egy Nette könyvtárat használnak, és szeretnék kihasználni a konfigurációs fájlok előnyeit.

A konfigurációs fájlok általában [NEON |neon:format] nyelven íródnak, és a legjobb, ha [olyan szerkesztőkben |best-practices:editors-and-tools#ide-editor] szerkesztjük őket, amelyek támogatják ezt a nyelvet. Úgy lehet rájuk gondolni, mint az objektumok **létrehozására és konfigurálására** vonatkozó utasításokra. Így a konfiguráció betöltésének eredménye egy úgynevezett factory lesz, ami egy olyan objektum, amely igény szerint létrehozza a használni kívánt más objektumokat. Például egy adatbázis-kapcsolatot stb.

Ezt a gyárat *függőségi injektáló konténernek* (DI konténer) is nevezik, és ha érdekelnek a részletek, olvassa el a [függőségi injektálásról |dependency-injection:] szóló fejezetet.

A konfiguráció betöltését és a konténer létrehozását a [api:Nette\Bootstrap\Configurator] osztály kezeli, ezért először telepítjük a `nette/bootstrap` csomagját:

```shell
composer require nette/bootstrap
```

És létrehozzuk a `Configurator` osztály egy példányát. Mivel a létrehozott DI konténer a lemezre lesz gyorsítótárazva, meg kell adnunk annak a könyvtárnak az elérési útvonalát, ahová a konténer el lesz mentve:

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

Linuxon vagy macOS-en állítsa be a `temp/` könyvtár [írási engedélyeit |nette:troubleshooting#Setting directory permissions].

És elérkeztünk magukhoz a konfigurációs fájlokhoz. Ezek betöltése a `addConfig()` segítségével történik:

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

Ha több konfigurációs fájlt szeretne hozzáadni, akkor a `addConfig()` függvényt többször is meghívhatja. Ha a fájlokban azonos kulcsú elemek jelennek meg, akkor azok felülíródnak (vagy tömbök esetén [összevonásra kerülnek |dependency-injection:configuration#Merging] ). A később beillesztett fájlnak magasabb prioritása van, mint az előzőnek.

Az utolsó lépés a DI konténer létrehozása:

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

És ez máris létrehozza számunkra a kívánt objektumokat. Ha például a [Nette Database |database:configuration] konfigurációját használjuk, akkor megkérhetjük, hogy hozzon létre adatbázis-kapcsolatokat:

```php
$db = $container->getByType(Nette\Database\Connection::class);
// vagy
$explorer = $container->getByType(Nette\Database\Explorer::class);
// vagy több kapcsolat létrehozásakor
$db = $container->getByName('database.main.connection');
```

És már dolgozhat is az adatbázissal!


Fejlesztés vs. Termelési mód .[#toc-development-vs-production-mode]
-------------------------------------------------------------------

Fejlesztési üzemmódban a konténer automatikusan frissül, amikor a konfigurációs fájlok változnak. Termelési üzemmódban csak egyszer generálódik, és a módosítások nem kerülnek ellenőrzésre.
A fejlesztői mód tehát a programozó maximális kényelmét, a termelési mód a teljesítményt célozza.

A mód kiválasztása automatikus felismeréssel történik, így általában nincs szükség konfigurálásra vagy kézi kapcsolásra. A mód fejlesztői, ha az alkalmazás egy localhoston fut (azaz a `127.0.0.1` vagy a `::1`) IP-címen, és nincs proxy (azaz annak HTTP fejléce). Egyébként termelési üzemmódban fut.

Ha más esetekben is engedélyezni szeretné a fejlesztési üzemmódot, például ha a programozók egy adott IP-címről férnek hozzá, használja a `setDebugMode()` címet:

```php
$configurator->setDebugMode('23.75.345.200');
// IP-címek tömbje is megadható
```

Mindenképpen javasoljuk az IP-cím és egy cookie kombinálását. Tároljon egy titkos tokent, pl. `secret1234`, a `nette-debug` cookie-ban, és így engedélyezi a fejlesztési módot a programozók számára, akik egy adott IP-címről lépnek be, és a token is szerepel a cookie-ban:

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

A fejlesztői üzemmódot akár teljesen is letilthatja, még a localhost számára is:

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


Paraméterek: .[#toc-parameters]
-------------------------------

A konfigurációs fájlokban is használhat paramétereket, amelyeket a <m id=37> `parameters` szakaszban definiálhat.

Kívülről is beilleszthetők a</m> `addDynamicParameters()` módszerrel:

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

A `projectId` paraméterre a konfigurációban a `%projectId%` jelöléssel lehet hivatkozni.


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

Konfigurációs fájl betöltése

A Nette egyes összetevői konfigurációs fájlok segítségével kerülnek beállításra. Megmutatjuk, hogyan lehet betölteni ezeket a fájlokat.

Ha a teljes keretrendszert használja, nincs szükség semmi másra. A projektben van egy előre elkészített config/ könyvtár a konfigurációs fájloknak, és az alkalmazás betöltője felelős ezek betöltéséért. Ez a cikk azoknak a felhasználóknak szól, akik csak egy Nette könyvtárat használnak, és szeretnék kihasználni a konfigurációs fájlok előnyeit.

A konfigurációs fájlok általában NEON nyelven íródnak, és a legjobb, ha olyan szerkesztőkben szerkesztjük őket, amelyek támogatják ezt a nyelvet. Úgy lehet rájuk gondolni, mint az objektumok létrehozására és konfigurálására vonatkozó utasításokra. Így a konfiguráció betöltésének eredménye egy úgynevezett factory lesz, ami egy olyan objektum, amely igény szerint létrehozza a használni kívánt más objektumokat. Például egy adatbázis-kapcsolatot stb.

Ezt a gyárat függőségi injektáló konténernek (DI konténer) is nevezik, és ha érdekelnek a részletek, olvassa el a függőségi injektálásról szóló fejezetet.

A konfiguráció betöltését és a konténer létrehozását a Nette\Bootstrap\Configurator osztály kezeli, ezért először telepítjük a nette/bootstrap csomagját:

composer require nette/bootstrap

És létrehozzuk a Configurator osztály egy példányát. Mivel a létrehozott DI konténer a lemezre lesz gyorsítótárazva, meg kell adnunk annak a könyvtárnak az elérési útvonalát, ahová a konténer el lesz mentve:

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

Linuxon vagy macOS-en állítsa be a temp/ könyvtár írási engedélyeit.

És elérkeztünk magukhoz a konfigurációs fájlokhoz. Ezek betöltése a addConfig() segítségével történik:

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

Ha több konfigurációs fájlt szeretne hozzáadni, akkor a addConfig() függvényt többször is meghívhatja. Ha a fájlokban azonos kulcsú elemek jelennek meg, akkor azok felülíródnak (vagy tömbök esetén összevonásra kerülnek ). A később beillesztett fájlnak magasabb prioritása van, mint az előzőnek.

Az utolsó lépés a DI konténer létrehozása:

$container = $configurator->createContainer();

És ez máris létrehozza számunkra a kívánt objektumokat. Ha például a Nette Database konfigurációját használjuk, akkor megkérhetjük, hogy hozzon létre adatbázis-kapcsolatokat:

$db = $container->getByType(Nette\Database\Connection::class);
// vagy
$explorer = $container->getByType(Nette\Database\Explorer::class);
// vagy több kapcsolat létrehozásakor
$db = $container->getByName('database.main.connection');

És már dolgozhat is az adatbázissal!

Fejlesztés vs. Termelési mód

Fejlesztési üzemmódban a konténer automatikusan frissül, amikor a konfigurációs fájlok változnak. Termelési üzemmódban csak egyszer generálódik, és a módosítások nem kerülnek ellenőrzésre. A fejlesztői mód tehát a programozó maximális kényelmét, a termelési mód a teljesítményt célozza.

A mód kiválasztása automatikus felismeréssel történik, így általában nincs szükség konfigurálásra vagy kézi kapcsolásra. A mód fejlesztői, ha az alkalmazás egy localhoston fut (azaz a 127.0.0.1 vagy a ::1) IP-címen, és nincs proxy (azaz annak HTTP fejléce). Egyébként termelési üzemmódban fut.

Ha más esetekben is engedélyezni szeretné a fejlesztési üzemmódot, például ha a programozók egy adott IP-címről férnek hozzá, használja a setDebugMode() címet:

$configurator->setDebugMode('23.75.345.200');
// IP-címek tömbje is megadható

Mindenképpen javasoljuk az IP-cím és egy cookie kombinálását. Tároljon egy titkos tokent, pl. secret1234, a nette-debug cookie-ban, és így engedélyezi a fejlesztési módot a programozók számára, akik egy adott IP-címről lépnek be, és a token is szerepel a cookie-ban:

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

A fejlesztői üzemmódot akár teljesen is letilthatja, még a localhost számára is:

$configurator->setDebugMode(false);

Paraméterek:

A konfigurációs fájlokban is használhat paramétereket, amelyeket a <m id=37> parameters szakaszban definiálhat.

Kívülről is beilleszthetők a</m> addDynamicParameters() módszerrel:

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

A projectId paraméterre a konfigurációban a %projectId% jelöléssel lehet hivatkozni.