Problém s přesměrováním – No route for Admin\Presenter\Sign:in()

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

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?