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.

verzió: 3.x