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.