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.