Namespace v presenteru končí s chybou „Cannot redeclare class“

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
David Růžička
Člen | 43
+
0
-

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.

VaKvas
Začátečník | 111
+
0
-

Ukaz, jak to tam mas…

Filip Procházka
Moderator | 4668
+
0
-

Smaž cache. Pokud pořád bude křičet, tak deklaruješ 2×

David Růžička
Člen | 43
+
0
-

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

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

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

Nette předepisuje konvence jen na některé věci. A konvenci pro moduly presenterů jsi pochopil správně :)