Nette Documentation Preview

syntax
Nette Bootstrap
***************

.[perex]
A Nette egyes részeit konfigurációs fájlok segítségével állítjuk be. Megmutatjuk, hogyan kell ezeket a fájlokat betölteni.

.[tip]
Ha a teljes keretrendszert használja, nincs szükség további teendőkre. A projektben van egy előkészített `config/` könyvtár a konfigurációs fájlok számára, és ezek betöltéséért az [alkalmazás betöltő |application:bootstrapping#DI konténer konfigurálása] felelős. Ez a cikk azoknak a felhasználóknak szól, akik csak egy Nette könyvtárat használnak, és ki szeretnék használni a konfigurációs fájlok lehetőségeit.

A konfigurációs fájlokat általában [NEON formátumban|neon:format] írják, és a legjobban [az azt támogató szerkesztőkben |best-practices:editors-and-tools#IDE szerkesztő] lehet szerkeszteni. Útmutatóként foghatók fel, hogyan **hozzunk létre és konfiguráljunk** objektumokat. Tehát a konfiguráció betöltésének eredménye egy úgynevezett factory lesz, ami egy olyan objektum, amely kérésre létrehozza számunkra a használni kívánt további objektumokat. Például adatbázis-kapcsolatokat stb.

Ezt a factory-t *dependency injection konténernek* (DI konténer) is nevezik, és ha érdeklik a részletek, olvassa el a [dependency injection |dependency-injection:] fejezetet.

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

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

És létrehozunk egy `Configurator` osztály példányt. Mivel a generált DI konténer a lemezre lesz gyorsítótárazva, meg kell adni annak a könyvtárnak az elérési útját, ahová menteni fogja:

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

Linuxon vagy macOS-en állítson be [írási jogokat |nette:troubleshooting#Könyvtárjogosultságok beállítása] a `temp/` könyvtárnak.

És elérkeztünk magukhoz a konfigurációs fájlokhoz. Ezeket az `addConfig()` segítségével töltjük be:

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

Ha több konfigurációs fájlt szeretnénk hozzáadni, többször is meghívhatjuk az `addConfig()` függvényt. Ha a fájlokban azonos kulcsú elemek jelennek meg, azok felülíródnak (vagy tömbök esetén [összevonódnak |dependency-injection:configuration#Összefésülés]). A később hozzáadott fájl magasabb prioritással rendelkezik, mint az előző.

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

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

És ez már létrehozza számunkra a kívánt objektumokat. Ha például a [Nette Database|database:configuration] konfigurációját használja, kérheti tőle adatbázis-kapcsolatok létrehozását:

```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 most már dolgozhat az adatbázissal!


Fejlesztői vs. éles üzemmód
---------------------------

Fejlesztői módban a konténer automatikusan frissül minden konfigurációs fájl módosításakor. Éles (produkciós) módban csak egyszer generálódik, és a változásokat nem ellenőrzi. A fejlesztői mód tehát a programozó maximális kényelmére összpontosít, az éles mód a teljesítményre és az éles bevetésre.

Az üzemmód kiválasztása automatikus felismeréssel történik, így általában nincs szükség semmit konfigurálni vagy manuálisan váltani. Az üzemmód fejlesztői, ha az alkalmazás localhoston fut (azaz IP-cím `127.0.0.1` vagy `::1`), és nincs jelen proxy (azaz annak HTTP fejléce). Ellenkező esetben éles módban fut.

Ha engedélyezni szeretnénk a fejlesztői módot más esetekben is, például egy adott IP-címről hozzáférő programozók számára, használjuk a `setDebugMode()` metódust:

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

Mindenképpen javasoljuk az IP-cím és egy cookie kombinálását. A `nette-debug` cookie-ba mentsünk egy titkos tokent, pl. `secret1234`, és így aktiváljuk a fejlesztői módot az adott IP-címről hozzáférő és a cookie-ban említett tokennel rendelkező programozók számára:

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

A fejlesztői módot teljesen ki is kapcsolhatjuk, még localhost esetén is:

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


Paraméterek
-----------

A konfigurációs fájlokban paramétereket is használhat, amelyeket [a `parameters` szekcióban |dependency-injection:configuration#Paraméterek] definiálunk.

Ezeket kívülről is beilleszthetjük az `addDynamicParameters()` metódussal:

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

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


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

Nette Bootstrap

A Nette egyes részeit konfigurációs fájlok segítségével állítjuk be. Megmutatjuk, hogyan kell ezeket a fájlokat betölteni.

Ha a teljes keretrendszert használja, nincs szükség további teendőkre. A projektben van egy előkészített config/ könyvtár a konfigurációs fájlok számára, és ezek betöltéséért az alkalmazás betöltő felelős. Ez a cikk azoknak a felhasználóknak szól, akik csak egy Nette könyvtárat használnak, és ki szeretnék használni a konfigurációs fájlok lehetőségeit.

A konfigurációs fájlokat általában NEON formátumban írják, és a legjobban az azt támogató szerkesztőkben lehet szerkeszteni. Útmutatóként foghatók fel, hogyan hozzunk létre és konfiguráljunk objektumokat. Tehát a konfiguráció betöltésének eredménye egy úgynevezett factory lesz, ami egy olyan objektum, amely kérésre létrehozza számunkra a használni kívánt további objektumokat. Például adatbázis-kapcsolatokat stb.

Ezt a factory-t dependency injection konténernek (DI konténer) is nevezik, és ha érdeklik a részletek, olvassa el a dependency injection fejezetet.

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

composer require nette/bootstrap

És létrehozunk egy Configurator osztály példányt. Mivel a generált DI konténer a lemezre lesz gyorsítótárazva, meg kell adni annak a könyvtárnak az elérési útját, ahová menteni fogja:

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

Linuxon vagy macOS-en állítson be írási jogokat a temp/ könyvtárnak.

És elérkeztünk magukhoz a konfigurációs fájlokhoz. Ezeket az addConfig() segítségével töltjük be:

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

Ha több konfigurációs fájlt szeretnénk hozzáadni, többször is meghívhatjuk az addConfig() függvényt. Ha a fájlokban azonos kulcsú elemek jelennek meg, azok felülíródnak (vagy tömbök esetén összevonódnak). A később hozzáadott fájl magasabb prioritással rendelkezik, mint az előző.

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

$container = $configurator->createContainer();

És ez már létrehozza számunkra a kívánt objektumokat. Ha például a Nette Database konfigurációját használja, kérheti tőle adatbázis-kapcsolatok létrehozását:

$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 most már dolgozhat az adatbázissal!

Fejlesztői vs. éles üzemmód

Fejlesztői módban a konténer automatikusan frissül minden konfigurációs fájl módosításakor. Éles (produkciós) módban csak egyszer generálódik, és a változásokat nem ellenőrzi. A fejlesztői mód tehát a programozó maximális kényelmére összpontosít, az éles mód a teljesítményre és az éles bevetésre.

Az üzemmód kiválasztása automatikus felismeréssel történik, így általában nincs szükség semmit konfigurálni vagy manuálisan váltani. Az üzemmód fejlesztői, ha az alkalmazás localhoston fut (azaz IP-cím 127.0.0.1 vagy ::1), és nincs jelen proxy (azaz annak HTTP fejléce). Ellenkező esetben éles módban fut.

Ha engedélyezni szeretnénk a fejlesztői módot más esetekben is, például egy adott IP-címről hozzáférő programozók számára, használjuk a setDebugMode() metódust:

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

Mindenképpen javasoljuk az IP-cím és egy cookie kombinálását. A nette-debug cookie-ba mentsünk egy titkos tokent, pl. secret1234, és így aktiváljuk a fejlesztői módot az adott IP-címről hozzáférő és a cookie-ban említett tokennel rendelkező programozók számára:

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

A fejlesztői módot teljesen ki is kapcsolhatjuk, még localhost esetén is:

$configurator->setDebugMode(false);

Paraméterek

A konfigurációs fájlokban paramétereket is használhat, amelyeket a parameters szekcióban definiálunk.

Ezeket kívülről is beilleszthetjük az addDynamicParameters() metódussal:

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

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