Problém s přesměrováním – No route for Admin\Presenter\Sign:in()
- Tomáš Jablonický
- Člen | 115
Ahoj,
pro klienta se snažím vytvořit základ vlastního CMS. Protože CMS bude v budoucnu obsahovat značné množství modulů, rozhodl sjem se dělit presentery do netradičních namespace podle pravidla
Module\<název_modulu>\Presenter\<NázevPresenter>
V neonu jsem tedy nastavil, kde má Nette hledat presentery:
<?php
nette:
session:
expiration: 14 days
application:
errorPresenter: Error
mapping:
*: Module\*\Presenter\*Presenter
?>
Routry fungují správně – po zadání do adresní řádky, se vskutku daný presenter nalezne. Problém nastává při pokusu o přesměrování, vytváření linku nebo action ve formuláři (případ přesměrování na login):
Nette\Application\UI\InvalidLinkException
No route for Admin\Presenter\Sign:in()
Přesměrování je nastaveno takto:
<?php
...
protected function startup()
{
parent::startup();
$this->name;
if (!$this->user->isLoggedIn()) $this->redirect ('Admin:Sign:in');
}
...
?>
Při změně na $this->redirect(‚Sign:in‘);,
dojde k jiné chybě Cannot load presenter ‚Sign‘, class
‚Module\SignPresenter‘ was not found in
‚C:\xampp\htdocs\editor\app/presenters/SignPresenter.php‘. Ano,
presenter se hledá ve staré adresářové struktuře.
Routry:
<?php
...
public function createRouter()
{
$router = new RouteList();
$router[] = new Route('index.php', 'Node:default', Route::ONE_WAY);
$router[] = new RouteList('<module>/<presenter>/<action>/<id>', array(
'presenter' => 'Default',
'action' => 'default',
'id' => null,
));
$router[] = $adminRouter = new RouteList('Admin');
$adminRouter[] = new Route('admin/<presenter>/<action>/[<id>]', array(
'presenter' => 'Default',
'action' => 'default',
'id' => null,
));
$router[] = $nodeRouter = new RouteList('Node');
$nodeRouter[] = new Route('<id>', 'Node:default');
return $router;
}
...
?>
Používám Nette 2.1-dev. Šlo by tento problém vyřešit přepsáním některé třídy bez nastavení pravidla v neonu?