Načítání vlastních tříd pomocí RobotLoaderu*
- dibalaj
- Člen | 40
Ahoj :-)
Měl bych menší dotaz – používám Nette 2 verzi bez namespaces a
s prefixy „N“.
Jak bych měl v bootloaderu nastavit RobotLoader, aby mi načítal mé
vlastní třídy?
Například třída Config je umístěná v
/libs/Classes/Common/Config.php
- RobotLoader je nastavený na adresář
/libs
, tudíž by měl třídu načíst, nebo se pletu? - V presenteru volám třídu jako Config::method();
Stále mi však laděnka říká, že tu třídu Nette nenalezlo. Co s tím?
Předem díky za rady.
Editoval Jan Tvrdík (3. 12. 2012 20:09)
- Jan Tvrdík
- Nette guru | 2595
Četl jsi dokumentaci?
Jak konkrétně to teď nastavuješ? Měl bys tam mít něco jako
$configurator = new Nette\Config\Configurator;
...
$configurator->setTempDirectory(__DIR__ . '/../temp');
$configurator->createRobotLoader()
->addDirectory(APP_DIR)
->addDirectory(LIBS_DIR) // zkontroluj, že v LIBS_DIR je skutečně správné hodnota
->register();
- dibalaj
- Člen | 40
$configurator = new NConfigurator;
...
$loader = $configurator->createRobotLoader();
$loader->addDirectory(dirname(__FILE__))
->addDirectory(dirname(__FILE__) . '/../libs')
->register();
Konstantu LIBS_DIR vůbec nepoužívám, dokumentaci jsem samozřejmě četl. Pletu se, nebo RobotLoader bude načítat všechny třídy ve složce /libs, ať už jsou v X podadresářích?
Editoval dibalaj (3. 12. 2012 20:16)
- Filip Procházka
- Moderator | 4668
Copak jsi to nezkoušel? Kdyby jsi to zkusil, tak už dávno víš, že jsi si odpověděl sám.
Pletu se, nebo RobotLoader bude načítat všechny třídy ve složce /libs, ať už jsou v X podadresářích?
Nepleteš, bude.
Tím, že budeš vlastní téma co hodinu oživovat příspěvkem řešení neurychlíš.
- dibalaj
- Člen | 40
HosipLan napsal(a):
Copak jsi to nezkoušel? Kdyby jsi to zkusil, tak už dávno víš, že jsi si odpověděl sám.
Pletu se, nebo RobotLoader bude načítat všechny třídy ve složce /libs, ať už jsou v X podadresářích?
Nepleteš, bude.
Tím, že budeš vlastní téma co hodinu oživovat příspěvkem řešení neurychlíš.
Omlouvám se, chtěl jsem to dořešit ještě ten večer. Když tedy Nette načítá všechny třídy pod tímto adresářem, proč mi nenačte mojí třídu v podadresáři?
- dibalaj
- Člen | 40
enumag napsal(a):
dibalaj: Běžné důvody jsou chybné namespace a typo v názvu třídy.
Ano, ovšem to není můj případ, jelikož nepoužívám verzi s namespaces. Mám verzi, která namespaces nepoužívá a používá prefixy tříd (například NDebug, …).
Používám adresářovou strukturu s moduly, v adresáři /app mám tedy
adresář „AdminModule“ a v něm pod adresáře „presenters“ a
„templates“. Defaultní presenter mám „DefaultPresenter“.
Pokud je tedy presenter součástí modulu, musí mít název třídy prefix
„Admin_“.
Stále to nejde, nějaký nápad?
- enumag
- Člen | 2118
Ano, ovšem to není můj případ, jelikož nepoužívám verzi s namespaces. Mám verzi, která namespaces nepoužívá a používá prefixy tříd (například NDebug, …).
Jistě, psal jsem to protože fakt že máš Nette bez namespaces ještě nutně neznamená, že i tvé třídy jsou bez namespaces.
Co to udělá když soubor s danou třídou requirneš ručně v bootstrapu?