BasePresenter pro moduly (AdminModule)

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

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

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

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)

Patrik Votoček
Člen | 2221
+
0
-

ukaž minifikovanou aplikaci… Bude tam nějaka blbost

Lopo
Člen | 277
+
0
-

mozno by teoreticky stacilo premaznut temp … u mna to vacsinu po pridani/premenovani/presunuti triedy staci :)

westrem
Člen | 398
+
0
-

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

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

jtousek
Člen | 951
+
0
-

To je přesně důvod proč nemám rád RobotLoader…

westrem
Člen | 398
+
0
-

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.

xr
Člen | 94
+
0
-

mozno je to blbost, ale nepouzivas nahodou vrziu pre PHP 5.3 s namespace-ami ?

jtousek
Člen | 951
+
0
-

xr napsal(a):

mozno je to blbost, ale nepouzivas nahodou vrziu pre PHP 5.3 s namespace-ami ?

To bylo na mě? Jestli jo tak ano.

A používám starej dobrej SimpleLoader z předchozích verzí. Ještě nezklamal.