Namespace v presenteru končí s chybou „Cannot redeclare class“
- David Růžička
- Člen | 43
Nevíte někdo, proč když svůj presenter (PostPresenter) hodím do nějakého namespace (třeba Test\Presenters), začne mi to vyhazovat chybu chybu:
Cannot redeclare class Test\Presenters\PostPresenter
Třídu tam určitě nikde dvakrát nedeklaruju.
- David Růžička
- Člen | 43
HosipLan napsal(a):
Smaž cache. Pokud pořád bude křičet, tak deklaruješ 2×
Tak smazání Cache to sice nevyřešilo, ale rozhodně pomohlo. Začalo to zobrazovat už smysluplnější chyby, konkrétně že nemůže najít třídu presenteru: PostPresenter.
Zkoumal jsem nějaké ukázkové zdrojáky, co jsem našel tady na fóru, a
na základě toho jsem pak změnil namespace presenteru z
„Test\Presenters\PostPresenter“ na „FrontModule\PostPresenter“ a do
routovacích pravidel přidal
‚module‘ ⇒ ‚Front‘,
Vše pak začalo fungovat. Problém je, že nevím proč :) Může mi to někdo vysvětlit případně nasměrovat někam, kde to vysvětleno je?
Konkrétně: Jaký je vztah mezi parameterem „module“ v routovacím pravidle a namespace příslušného presenteru? Doteď jsem si myslel, že namespace si v presenteru můžu nadefinovat jak se mi zlíbí, ale teď to vypadá, že tam je nějaká restrikce. Je to tak?
- Filip Procházka
- Moderator | 4668
Klasické presentery snad chápeš https://doc.nette.org/…n/presenters.
Moduly jsou od toho, aby jsi mohl presentery členit, a vytvářet „související skupiny presenterů“, což jsou moduly.
Říká se tomu také jmenná konvence, kde framework ti předepisuje, jak by
jsi měl pojmenovávat presentery a umisťovat šablony, ale všechno tohle
chování si můžeš změnit. Ovšem namespace Test\Presenters
se
mi vubec nelibi :)
Editoval HosipLan (30. 8. 2011 17:20)
- David Růžička
- Člen | 43
Jmennou konvenci chápu a rád se jí podřídím, jenom jsem netušil (nebo
na to ještě nenarazil), že je v nette definovaná i pro jmenné
prostory.
Chápu tedy dobře, že pokud nechci předělávat zavedené konvence, tak
všechny presentery v modulu „Mujmodul“ musí být v namespace
„MujmodulModule“?
- Filip Procházka
- Moderator | 4668
Nette předepisuje konvence jen na některé věci. A konvenci pro moduly presenterů jsi pochopil správně :)