BasePresenter pro moduly (AdminModule)
- FutureMillennium
- Člen | 6
Vyřešeno: stačilo smazat temp
Zdravím,
mám jednoduchý problém, ale nikde nedokážu najít řešení. Tak tedy:
jak mám udělat BasePresenter pro určitý modul?
Tzn. mám AdminModule/ a v něm presenters/ a templates/. Jak mám pojmenovat
BasePresenter, aby se načítal pro všechny presentery v AdminModule? Zkoušel
jsem AdminModule/presenters/BasePresenter.php,
AdminModule/presenters/AdminBasePresenter.php,
AdminModule/presenters/BaseAdminPresenter.php, třídu jsem zkoušel pojmenovat
AdminBasePresenter, BaseAdminPresenter, Admin_BasePresenter a nic z toho nic
nedělá.
Když dám v nějakem AdminModule presenteru
extends Admin_BasePresenter
místo
extends BasePresenter
, tak mi to hlásí:
Fatal error: Class ‚Admin_BasePresenter‘ not found in …/app/AdminModule/presenters/DefaultPresenter.php on line 18
V dokumentaci není o modulech ani slovo.
Děkuji
Editoval FutureMillennium (12. 8. 2010 22:15)
- Patrik Votoček
- Člen | 2221
A jmenuje se tvůj Admin_BasePresenter
skutečně
Admin_BasePresenter
? Doporučuji ti přečíst si něco o OOP
v PHP… Třeba http://ondrej.mirtes.cz/…sheet-tahak/
- FutureMillennium
- Člen | 6
Ano, jmenuje se Admin_BasePresenter
Popř. AdminBasePresenter nebo BaseAdminPresenter, podle toho jak se jmenuje
soubor, logicky
Pěkné, ale odkazovaný článek mi neřekl naprosto nic nového
Editoval FutureMillennium (12. 8. 2010 4:16)
- westrem
- Člen | 398
FutureMillennium napsal(a):
Popř. AdminBasePresenter nebo BaseAdminPresenter, podle toho jak se jmenuje soubor, logicky
No to je sice mozno „logicke“ ale Nette ma prave killer feature v robot loaderi aby programator mohol od tohto opustit, ono casom sam zbadas, ze class per file je riadne otravne a niekedy je proste vhodne mat viac class v jednm subore.
Presenter (tzn. ten ktory sa pouziva a nie je len predok) pre hocijaky modul
ma nazov Module_NamePresenter a mal by byt final.
Presenter, od ktoreho chces dedit a ma zlucovat nejaku funkcionalitu, nemusi byt
nutne v adresari pre modul, ale mal by byt abstract.
Dalsia vec, mas v config.ini nastavene scanovanie robot loaderom? Tzn toto:
service.Nette-Loaders-RobotLoader.factory = Nette\NConfigurator::createRobotLoader
service.Nette-Loaders-RobotLoader.option.directory[] = %appDir%
service.Nette-Loaders-RobotLoader.option.directory[] = %libsDir%
service.Nette-Loaders-RobotLoader.run = TRUE
- FutureMillennium
- Člen | 6
Lopo napsal(a):
mozno by teoreticky stacilo premaznut temp … u mna to vacsinu po pridani/premenovani/presunuti triedy staci :)
Mno jo, samozřejmě máš pravdu. Mohlo mě to napadnout, protože už minule jsem si kvůli něčemu trhal vlasy a přitom stačilo smazat temp. Díky
- westrem
- Člen | 398
jtousek napsal(a):
To je přesně důvod proč nemám rád RobotLoader…
Tak trochu nechapem, ak vyvijas (pri ostrom provoze sa nas toto netyka) tak je niekolko moznosti:
1. Vytvoril si novu triedu, lenze s bootstrapom nastavenym takto (sme vo vyvoji)
NDebug::enable(NDebug::DEVELOPMENT);
Ndebug::enableProfiler();
NEnvironment::setMode(NEnvironment::DEVELOPMENT);
ti nove triedy najde automaticky, pretoze ak nieco nenajde, robotloader smaze temp a pokusi sa ho vybudovat znovu.
2. Premenovanie alebo presun tried znamena v drtivej vecsine bud velky refactoring alebo trochu blbo navrhnutu appku a nasledny minor refactorring. V oboch pripadoch to ale nie je bezna situacia a preto by nieco ako premazanie tempu malo byt prve co cloveka napadne.