RobotLoader: autoloading tříd
RobotLoader je nástroj, který vám zajistí komfort automatického načítání tříd pro celou vaši aplikaci včetně knihoven třetích stran.
- zbavíme se všech
require
- budou se načítat jen potřebné skripty
- nevyžaduje se žádná striktní konvence pojmenování souborů
- lze mít i více tříd v jednom souboru
RobotLoader je nesmírně pohodlný a návykový!
Můžeme tedy zapomenout na tyto známé bloky kódu:
require_once 'Utils/Page.php';
require_once 'Utils/Style.php';
require_once 'Utils/Paginator.php';
...
Podobně, jako Google robot prochází a indexuje webové stránky, tak i RobotLoader prochází všechny PHP skripty a zaznamenává si, které třídy, rozhraní a traity v nich našel. Výsledky bádání si poté uloží do cache a použije při dalším požadavku. Stačí tedy určit, které adresáře má procházet a kam ukládat cache:
$loader = new Nette\Loaders\RobotLoader;
// přidáme adresáře, které má RobotLoader indexovat
$loader->addDirectory(__DIR__ . '/app');
$loader->addDirectory(__DIR__ . '/libs');
// nastavíme cachování na disk do adresáře 'temp'
$loader->setTempDirectory(__DIR__ . '/temp');
$loader->register(); // spustíme RobotLoader
A to je vše, od této chvíle nemusíme používat require
. Paráda!
Pokud RobotLoader narazí při indexaci na duplicitní název třídy, vyhodí výjimku a informuje vás o tom.
Nastavením $loader->setAutoRefresh(true nebo false)
určíme, zda má RobotLoader reindexovat soubory, když
narazí na novou třídu. To by mělo být vypnuto na produkčních serverech.
Proto je nutné při nahrání nové verze aplikace na web smazat cache.
Pokud chcete, aby RobotLoader přeskočil nějaký adresář, použijte $loader->excludeDirectory('temp')
.
Nette aplikace
Uvnitř Nette aplikace, kde se používá v zaváděcím souboru bootstrap.php
objekt $configurator
,
lze zápis zjednodušit:
$configurator = new Nette\Configurator;
...
$configurator->setTempDirectory(__DIR__ . '/../temp');
$configurator->createRobotLoader()
->addDirectory(__DIR__)
->addDirectory(__DIR__ . '/../libs')
->register();