RobotLoader nenajde třídy, které zaregistruji v config.neon. Jinak ano
- nettolog
- Člen | 68
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
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
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
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
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)