routa pro dva různé presentery

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

Ahoj,
mám následující problém:

2 prezentery a dvě různé akce:
Presenter:Default, action:page
Presenter:Package, action:flag.

Podoba url by měla vypadat takto (současná → požadovaná):
nazev_webu/default/page/8 → nazev_webu/o-nas (např pro id_page = 8)
nazev_webu/package/flag/11 → nazev_webu/plavby (např pro id_flag = 11)

Odkazy jsou takto:

<?php
{plink Default:page, $t->link}
{plink Package:flag, $f->id}
?>

Routy mám následující:

<?php
$router[] = new Route('/<presenter Default>/<action page>/<id>/', array(
                'module' => 'Front',
                'presenter' => 'Default',
                'action' => 'page',
                'id' => array(
                    Route::FILTER_TABLE => array(
                    'o-nas' => '8'
                    ),
                ),
));
?>

a

<?php
$router[] = new Route('/<presenter Package>/<action flag>/<id>/', array(
                'module' => 'Front',
                'presenter' => 'Package',
                'action' => 'flag',
                'id' => array(
                    Route::FILTER_TABLE => array(
                    'plavby' => '11'
                    ),
                ),
));
?>

Pokud nechám jen první routu (druhou zakomentuji), tak funguje pro dané odkazy (plink Default:page). Odkazy (plink Package:flag) spadnou prostě do defaultní routy.
Pokud použiji obě routy, tak i druhý odkaz (plink Package:flag) mi spadne do první routy, tzn místo presenteru Package a akce flag se zavolá dle první routy Default a akce page.

Nevíte někdo jak tohle řešit? Buď mám chybu nebo na to jdu úplně špatně.
Pokud úplně špatně jak tedy řešit takovouto věc – 2 presentery a různé akce – jak to vyřešit ať se použije pokaždé jiná routa a jak to nadefinovat, nebo jedna routa, ale rozliší se jaký prezenter a jaká akce se má zavolat.
Díky

Editoval mauricio (21. 4. 2015 14:25)

Lukeluha
Člen | 130
+
0
-

Doporučoval bych v router factory si projít všechny url, které můžou být definované (nejspíš z db), popřípadě ručně a nadefinovat ji každou zvlášť. Takže např.

	$default = $this->model->getDefaultsUrl();
	foreach ($default as $url) {
		$router[] = new Route($url->name, array(
'module' => 'Front',
'presenter' => 'Default',
'action' => 'page',
				'id' => $url->id
		));
	}

a to stejné i pro url pro Package presenter :)