Přesměrování „neco/1“ na „neco/1/nazev-clanku“

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

Ahoj,
podle návodu v dokumentaci jsem si udělal routu ve tvaru

$router[] = new Route('<presenter>[/<action>][/<id [0-9]+>][/<title>]', array(
    'presenter' => 'Homepage',
    'action' => 'default'));

Je možné zařídit, aby se URL „localhost/detail/1“, přesměrovalo na hezké-URL „localhost/detail/1/nazev-clanku“? Jestli ano, můžete mě nakopnout, jak na to? Zkoušel jsem hledat ve fóru ale neúspěšně.

llook
Člen | 407
+
0
-

To bych dělal v presenteru:

public function renderDefault($id, $title)
{
	$article = ... získání článku nějak odněkud ...
	$webalizedTitle = Strings::webalize($article->title);
	if ($title !== $webalizedTitle) {
		$this->redirect('this', array('title' => $webalizedTitle));
	}

	...
}
Jan Endel
Člen | 1016
+
0
-

Proč v presenteru to je fujík, pokud má router možnost, vždy se vydává cestou nejkratší adresy, toto chování lze ale změnit. Mělo by stačit něco takového (vykřičník před title):

$router[] = new Route('<presenter>[/<action>][/<id [0-9]+>][!/<title>]', array(
    'presenter' => 'Homepage',
    'action' => 'default'));
Tomas Jancik
Člen | 103
+
0
-

k tomu se tusim pouzivaji FILTER_IN, FILTER_OUT https://www.youtube.com/watch?…
a taky doporucuju zkouknout video https://www.youtube.com/watch?…

gog
Člen | 5
+
0
-

llook napsal(a):

To bych dělal v presenteru:

Díky, tohle bude nejspíš správné řešení.

Varianta s vykřičníkem mi bohužel nefunguje (resp. routuje to stejně, jako by tam vykřičník nebyl). Přes FILTER_IN a FILTER_OUT mám nastavené masky podle návodu.

Proč si myslím, že funguje jen varianta od llook: když zadám do prohlížeče „localhost/detail/1“, tak to uvedenému pravidlu vyhovuje a v presenteru se načte článek s id=1. Ale při routování ten článek ještě není načtený, tudíž se nezná jeho název (title), tudíž se url nepřepíše na požadovaný tvar. To zaručí až přesměrování v presenteru. Snad to chápu správně.

Editoval gog (15. 6. 2012 14:25)