Viac Modulov a ich routovanie

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

Zdravím, chcel by som sa poradiť. Mám aplikáciu kde riešim viac modulov a pri tomto nastavní Route suboru sa mi stava vec že vždy prvý Route vezme ako nadardený a ked sa chcem linkovať na ostatné tak vždy berie prvý Route ako modul a hľadá presenter pre danu linku. Viete mi poradiť?

public static function createRouter()
	{

        $router = new RouteList;


        $router[] = new Route('<presenter>/<action>[/<id>]\'', array(
            'module' => 'Login',
            'presenters' => 'Login',
            'action' => 'default',
            'id' => NULL,
        ));

        $router[] = new Route('<presenter>/<action>[/<id>]\'', array(
            'module' => 'Admin',
            'presenters' => 'Admin',
            'action' => 'default',
            'id' => NULL,
        ));

        $router[] = new Route('<presenter>/<action>[/<id>]\'', array(
            'module' => 'AutoKino',
            'presenters' => 'AutoKino',
            'action' => 'default',
            'id' => NULL,
        ));



		//$router[] = new Route('<presenter>/<action>[/<id>]', 'Homepage:default');
		return $router;
	}

Vystup v prehliadači.

Cannot load presenter 'Login:Admin', class 'App\LoginModule\Presenters\AdminPresenter' was not found.
duke
Člen | 650
+
0
-

Musíš jednotlivé routy nějak odlišit, aby byly od sebe rozpoznatelné. A pak je definovat v pořadí od nejspecifičtější k nejobecnější. Např.:

public static function createRouter()
{
        $router = new RouteList;

        $router[] = new Route('login/<presenter>/<action>[/<id>]', array(
            'module' => 'Login',
            'presenter' => 'Login',
            'action' => 'default',
            'id' => NULL,
        ));

        $router[] = new Route('admin/<presenter>/<action>[/<id>]', array(
            'module' => 'Admin',
            'presenter' => 'Admin',
            'action' => 'default',
            'id' => NULL,
        ));

        $router[] = new Route('<presenter>/<action>[/<id>]', array(
            'module' => 'AutoKino',
            'presenter' => 'AutoKino',
            'action' => 'default',
            'id' => NULL,
        ));

	      return $router;
	}

Toto ale povede na url jako:

  • login/login/
  • admin/admin/default/2
  • autokino/someaction/5

Pokud máš ale v modulu jen 1 presenter, nemusíš ho vůbec do masky routy uvádět.
Nejdřív si ale ujasni, jak chceš, aby tvá url vlastně vypadala.

Editoval duke (2. 6. 2017 13:36)

vsimjak
Člen | 9
+
0
-

Ďakujem pomohlo.