Bootstrap
Bootstrap je zaváděcí kód, který inicializuje prostředí, vytvoří dependency injection (DI) kontejner a spustí aplikaci. Řekneme si:
- jak systémový kontejner vytvořit
- jak se konfiguruje pomocí NEON souborů
- jak na produkční a vývojářský režim
- jak používat a vytvářet rozšíření pro kontejner
Omlouváme se, tato stránka je ještě v přípravě.
Systémový kontejner je statický Dependency Injection kontejner, ve kterém se nacházejí všechny služby a parametry potřebné pro běh aplikace. Tedy nejen služby frameworku samotného, ale i všech knihoven, které se rozhodnete použít. Jak takový základní kontejner vypadá, se můžete podívat třeba tady.
V praxi se ukázalo, že programování kontejnerů je značně rutinní a nezáživná činnost. Navíc s tím, jak aplikace roste, je stále těžší se v něm orientovat. Pohodlným řešením je nechat si kontejner vygenerovat. Což Nette Framework umí. Stručným konfiguračním jazykem popíšeme, jaké služby má obsahovat a framework sám PHP kód vytvoří. S pravdou ven: i kód výše odkazovaného kontejneru byl vygenerován.
Configurator
Generování kontejneru je úkolem třídy Nette\Configurator. Samotný PHP kód se vytváří jen jednou a poté uloží do cache, proto musíme určit složku pro dočasné soubory:
$configurator = new Nette\Configurator;
$configurator->setTempDirectory(__DIR__ . '/../temp');
Poté stačí uvést cestu ke konfiguračnímu souboru:
$configurator->addConfig(__DIR__ . '/config/config.neon');
A vytvoření instance je už maličkost:
// vrací objekt třídy SystemContainer
$container = $configurator->createContainer();
Prostředí
Configurator se pokouší detekovat, zda aplikace běží na ostrém (production) nebo vývojářském (development) serveru.
Činí tak podle IP adresy počítače, z něhož k serveru přistupujete. Pokud je 127.0.0.1, považuje server za
vývojářský. Zjistit prostředí nemůžete, ale to nevadí, protože se používá pouze pro volbu sekce při načítání
konfigurace a to můžete ovlivnit parametrem při volání addConfig()
.
$environment = Nette\Configurator::detectDebugMode('vaše ip adresa')
? $configurator::DEVELOPMENT
: $configurator::PRODUCTION;
$configurator->addConfig(__DIR__ . '/config/config.neon', $environment);
Jako $environment
můžete předat jakýkoliv řetězec, nejen production
či
development
. Můžete si tímto způsobem vyžádat použití libovolné sekce ve vašem konfiguračním souboru.
Detekci takového prostředí však musíte řešit sami, ať už pomocí systémové proměnné (třeba
getenv("COMPUTERNAME")
) nebo doménového jména serveru ($_SERVER['SERVER_NAME']
).
Vývojářský režim
Trochu jiná věc je režim, v jakém k aplikaci přistupujete. Pro aktivaci laděnky můžete chtít přistupovat k produkčnímu serveru jako vývojář. Rozpoznává se podle stejného principu. Režim zjistíte metodou isDebugMode() a nastavíte pomocí setDebugMode(). Hodí se především, pokud aktivujete debugger pomocí enableDebugger(), která musí následovat až po nastavení režimu.
// aktivuje laděnku pouze pro dané ip adresy
$configurator->setDebugMode(array('90.180.45.360', '90.180.45.361'));
// nebo všem
$configurator->setDebugMode(); // = TRUE
// nebo nikomu
$configurator->setDebugMode($configurator::NONE); // = FALSE
$configurator->enableDebugger(__DIR__ . '/../log');
RobotLoader
Pro sestavení kontejneru je potřeba načíst všechny třídy, které se v konfiguračním souboru uvádějí. K tomu je
obvykle třeba aktivovat RobotLoader. Třída Configurator nám vychází vstříc metodou,
která vyrobí RobotLoader, nám pak stačí uvést indexované adresáře a robota aktivovat. Nezapomeňte tak učinit ještě
před samotným voláním createContainer()
.
$configurator->createRobotLoader()
->addDirectory(__DIR__)
->addDirectory(__DIR__ . '/../lib')
->register();