Hogyan töltsünk be egy konfigurációs fájlt

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.

verzió: 3.x