You are browsing the unmaintained documentation for old Nette 2.2. See documentation for current Nette.

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

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();
Vylepšit tuto stránku