Načítání vlastních tříd pomocí RobotLoaderu*

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
dibalaj
Člen | 40
+
0
-

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
+
0
-

Č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
+
0
-
$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
+
0
-

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
+
0
-

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?

enumag
Člen | 2118
+
0
-

dibalaj: Běžné důvody jsou chybné namespace a typo v názvu třídy.

dibalaj
Člen | 40
+
0
-

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?

Tomas Jancik
Člen | 103
+
0
-

vymazal jsi cache po pridani te tridy?

dibalaj
Člen | 40
+
0
-

Tomas Jancik napsal(a):

vymazal jsi cache po pridani te tridy?

Ano, tu jsem mazal již hodněkrát.

jasir
Člen | 746
+
0
-

Podívej se do souboru cache/_Nette.RobotLoader/xxxxxxx, jestli tam tu svojí třídu vidíš.

dibalaj
Člen | 40
+
0
-

Není tam.

enumag
Člen | 2118
+
0
-

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?

dibalaj
Člen | 40
+
0
-

Tak jsem problém vyřešil. Ale stále nevím jak. Vše jsem smazal, znovu nahrál sandbox, vytvořil aplikaci, nastavil routy, apod. a funguje to. Tak jestli můžu touto cestou, tak tento thread můžete zamknout.

Díky