Class used in service not found
- Marty_McFly
- Člen | 4
Ahoj,
před 3 roky jsem dělal jako maturitní projekt web v PHP. Bylo technikou spaghetti code, vymyslel jsem si super logiku načítání a přesměrování částečně pomocí .htaccess a ošetřil všechny chyby a fungovalo to, ale nedávno jsem to znovu otevřel a chvilku jsem se v tom musel zorientovávat, tak mě napadlo, když jsem slyšel super ohlas na Nette, že bych to mohl zkusit znovu, tentokrát objektově a mnohem čistěji, protože 30 souborů a většina s 200 řádky špaget není moc pěkný pohled… :D
OOP i MVC už mám v malíku, tak jsem si poslední 2 dny procházel veškerou Nette dokumentaci a fakt je to úžasná věc. Škoda, že jsem s tím nezačal dříve. :)
Potřeboval bych malou pomoc. Vytvořil jsem si nový projekt v NetBeans a přidal jsem pár tříd
DatabaseManager
SongManager
SongPresenter
přidal jsem je do config.neon, ale při načtení stránky se mi zobrazila chyba
Nette\DI\ServiceCreationException
Class App\Model\SongManager used in service ‚28_App_Model_SongManager‘ not found.
Už jsem si prošel pár podobných témat tady na fóru, ale stále nevidím, kde může být co špatně. Robot zřejmě nevidí tyto soubory, ale přitom by měl. Ještě před touto chybou jsem řešil tabulátory v config.neon, protože v Netbeans se místo jednoho skutečného tabulátoru udělaly 4 mezery a proto se mi zobrazila chyba s mezerami v Tracy (to už je ok).
Zabalený projekt v RAR – http://leteckaposta.cz/901965226
Takto rozbalený projekt spustit jde, ovšem pokud odkomentuju kontruktor
v SongPresenter a 3 řádky v config.neon, zobrazuje se výše uvedená
chyba.
Pokud by někdo byl schopen říct, kde je chyba, budu moc rád. :)
Dotazy ohledně Nette:
- Proč je defaultně složka templates ve složce presenters a ne ve složce app?
- Je nějaký záměr, že složka model je pojmenovaná v jednotném čísle na rozdíl od presenters a templates?
- Proč nemusí být (aspoň to tak defaultně není) v config.neon uveden HomepagePresenter?
edit:
- Všiml jsem si, že, když je v latte šabloně nějaký blok, který zároveň dosazuje text do tagu title:
<h1 n:block=title>Congratulations!</h1>
- a který zároveň třeba tabulátorem posunu, ve zdrojovém stránky pak je stejné odsazení i uvnitř tagu title. Myslel jsem, že by se do title tagu měl jen dosadit text „Congratulations!“ a ne i mezery před tagem <h1>, které by de facto neměly být jeho součástí, ne?
Editoval Marty_McFly (4. 11. 2018 4:13)
- CZechBoY
- Člen | 3608
Presentery se registruji defaultne sami, ale da se to vypnout.
Templates slozku muzes mit kde chces, jen je potreba to nastavit. Defaultne se
sablony hledaji v presenters/templates/$presenter/$akce.latte a
presenters/templates/$presenter.$akce.latte.
Slozka models uz je jedno jak se jmenuje, to je na programatorovi…
Nedival jsem se na tvuj projekt, ale hadam ze si nedal tridu do namespace.
- David Grudl
- Nette Core | 8239
- Proč je defaultně složka templates ve složce presenters a ne ve složce app?
Můžeš ji dát i do složky app, je to věc vkusu
- Je nějaký záměr, že složka model je pojmenovaná v jednotném čísle na rozdíl od presenters a templates?
Model je reprezentace systému, seskupení objektů. Obvykle je v aplikaci jeden, proto jednotné číslo.
Myslel jsem, že by se do title tagu měl jen dosadit text „Congratulations!“ a ne i mezery před tagem <h1>
n:makra pojímají element jako celek, navíc včetně odsazení, což je
důležité kvůli vizuální podobě výsledného HTML kódu. Jen vnitřek
elementu pojímá n:makro s předponou inner-
, takže třeba
n:inner-block=title
. Ale zvyk je to psát bez inner a oříznout
mezery lze v layoutu pomocí {block title|trim}
nebo
{include title|trim}
.
- Marty_McFly
- Člen | 4
Smazal jsem cache NetBeansu a vytvořil nový projekt úplně stejně a vypadá to, že je všechno ok. Zajímavé, nevím, kde byla chyba.
Editoval Marty_McFly (5. 11. 2018 4:06)
- Marty_McFly
- Člen | 4
Šaman napsal(a):
Chybí ti složené závorky okolo těch
$song->foobar
.
Ano, už jsem to zjistil, tak jsem ten kus smazal, než jsem si ovšem přečetl tvou odpověď. Díky. :) Už je na čase si jít lehnout po náročné noci… :D
Editoval Marty_McFly (5. 11. 2018 4:11)