Routování modulů a adresáře
- Lawondyss
- Člen | 106
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?
- Aurielle
- Člen | 1281
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‘.
- Lawondyss
- Člen | 106
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 ;-)