Routování modulů a adresáře

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

Mám adresářovou strukturu:

FrontModule
  presenters
    DefaultPresenter.php
  template
    default.phtml
AdminModule
  presenters
    DefaultPresenter.php
  template
    default.phtml
presenters
  basepresenter.php
templates
  @layout.phtml

a routy

$router[] = new Nette\Application\Route('<presenter>/<action>/<id>', array(
  'module' => 'Front',
  'presenter' => 'Default',
  'action' => 'default',
  'id' => 'home',
));

$router[] = new Nette\Application\Route('admin/<presenter>/<action>/<id>', array(
  'module' => 'Admin',
  'presenter' => 'Default',
  'action' => 'default',
  'id' => 'home',
));

Při spuštění mi aplikace hlásí chybu

**Nette\Application\BadRequestException #404

Cannot load presenter ‚Front:Default‘, class ‚FrontModule\DefaultPresenter‘ was not found in ‚D:\Weby\projekty\MY\Volis\application\app/FrontModule/presenters/DefaultPresenter.php‘.
**

Jak mám říct, kde hledat presentery modulů v mé adresářové struktuře?

Ani
Člen | 226
+
0
-

Mě přijde, že to hledá ve správné složce. Nechybí ti tam ta namespace?

Lawondyss
Člen | 106
+
0
-

Měl by hledat v FrontModule\Presenters\DefaultPresenter.php
Jakou namespace kde máš na mysli?

natlaid
Člen | 18
+
0
-

Ani se tě ptal, jestli máš v tom Presenteru (FrontModule\Presenters\DefaultPresenter.php), daný nahoře v tom souboru řádek:
 namespace FrontModule;

Lawondyss
Člen | 106
+
0
-

Chyběl.
Ale nějak to nic neřeší (naopak to přidává práci s nastavením všech namespace i v ostatních presenterech).
Stále hledá DefaultPresenter v adresáři FrontModule namísto adresáře FrontModule\presenters.

Mohl by mi případně někdo vysvětlit používání Nette na PHP 5.3?

Aurielle
Člen | 1281
+
0
-

Pokud používáš verzi pro PHP 5.3 s namespace, tak u všech presenterů, které patří do nějakého modulu, musíš uvést namespace XxxModule. Jinak se ti samozřejmě presenter nenajde. A hledá ve správném adresáři, přečti si ještě jednou svoji chybovou hlášku:

Cannot load presenter ‚Front:Default‘, class ‚FrontModule\DefaultPresenter‘ was not found in ‚D:\Weby\projekty\MY\Volis\application\app/FrontModule/presenters/DefaultPresenter.php‘.

Ani
Člen | 226
+
0
-

Ale ti to píše

not found in ‚D:\Weby\projekty\MY\Volis\application\app/FrontModule/presenters/DefaultPresenter.php

Po připsání namespace se musí promazat temp.

e: jsem měl to okno otevřený nějak dlouho

Editoval Ani (22. 11. 2010 11:24)

jtousek
Člen | 951
+
0
-

RobotLoader hledá všude, není pravda že by se do složky presenters nepodíval. Zkus smazat cache.

Lawondyss
Člen | 106
+
0
-

Už jsem to pochopil. Nette s namespace už nepoužívá prefixy v názvech presenterů podle modulu (Front_DefaultPresenter), ale spoléhá se už jen na namespace.

namespace FrontModule;
final class DefaultPresenter
{
...
}

Což ovšem vyžaduje aplikaci rozdělit do různých namespace a dávat si pozor, aby je člověk nezapomněl někde uvést.

Tu chybu jsem četl pořádně, jen mi vlastně nedošlo, co mi to říká. S namespace nemám ještě zkušenosti. To ovšem měním ;-)