RobotLoader nenajde třídy, které zaregistruji v config.neon. Jinak ano

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

V bootstrap.php mám robotloadera:

$loader = new Nette\Loaders\RobotLoader;
$loader->addDirectory(__DIR__.'/../libs');
$loader->setCacheStorage(new Nette\Caching\Storages\FileStorage(__DIR__.'/../temp/cache'));
$loader->register(); // spustíme RobotLoader

Ve složce libs mám několikero tříd. Jedna třída funguje bez problému. V presenteru jen použiju use Class a dál s ní bez problému pracuji. V rámci hledání příčiny problému (myslel jsem že je jinde) jsem zkusil přidat další třídu – https://componette.org/search/?…

Stáhl jsem php, vložil do libs a upravil config.neon:

tracy:
	bar:
		- CustomConnectionPanel
		- NetteExtras\XDebugHelper

A zase pro mě známá chyba:

Class NetteExtras\XDebugHelper does not exist

Cache jsem samozřejmě několikrát mazal. Je mi záhadou, že s jednou třídou Nette problém nemá a s dalšími ano. Rozdíl tam vlastně je, u těch dvou se je snažím zaregistrovat v config.neon, tu jednu (funkční) tam nemám. Nevíte, kde by mohl být problém?

Šaman
Člen | 2666
+
+1
-

Vzhledem k druhému odkazovanému vláknu, kde se snažíš pracovat s procedurálním kódem jako s třídou, ti mohu jen doporučit zkontrolovat namespaces, zkontrolovat jestli opravdu máš ten kód v /libs (doporučená instalace je pomocí Composeru, ten jde mimo RobotLoader) a jestli jsi opravdu přesvědčený, že tohle všechno je v pořádku, tak poslat odkaz na celý projekt. Chyba tam samozřejmě někde bude, ale věřím, že ne v RobotLoaderu (ten nám totiž všem načítá vše, co se mu řeklo).

nettolog
Člen | 68
+
0
-

Děkuji za rady, ale to vše jsem zkontroloval a zdá se to být v pořádku. Koukal jsem i do cache autoloaderu a třídy tam má „zaindexované“, takže vážně nevím. Pokud bych tě o to mohl poprosit, tak jsem web nahrál tady: http://uloz.to/…toloader-rar (můžeš ho rovnou spustit na localhostu, neměla by tam být žádná závislost na databázi apod.).

Editoval nettolog (31. 7. 2015 21:23)

David Matějka
Moderator | 6445
+
+1
-

Proc tam znovu vytvaris robot loader? a navic ho vytvaris pozde, az pote, co se vytvoril (nebo u tebe spis nevytvoril) container. A proc neinstalujes to extension pres composer?

Jestli chces pridat adresare robot loaderu, udelej to tady

nettolog
Člen | 68
+
0
-

Díky za komentář, já jsem poprvé robotloadera z dokumentace popravdě moc nepochopil, jen jsem potřeboval použít jednu třídu, tak jsem postupoval podle https://doc.nette.org/cs/robot-loader#…. Je to už dlouhá doba zpátky, takže jsem si teď neuvědomil, co všechno jsem tam dělal. Můj (druhý) robotloader tedy mažu a složku libs přesouvám do app, tam už si to loader najde sám.

Tak to jo, tady jsem chybu nečekal, byl jsem přesvědčený, že ten můj (špatně nastavený) robotloader funguje dobře, protože jednu třídu to načítalo bez problému, ale ona byla současně i ve složce app/model, což jsem nevěděl. Tam si ji ten první robotloader našel.

Ještě jednou díky, já jsem se do toho zamotal natolik, že bych na to asi nepřišel… :)

Editoval nettolog (1. 8. 2015 22:50)