Routing – id, slug a kanonizace

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

Zdravím,

pokúšam si zrobiť adresy v tvare <id>-<slug>, ale zrejme nie som na tej správnej ceste. V routingu som si dal:

$router[] = new Route('<locale>/[<id>-<slug>/]', 'Post:show');

A v šablóne to teraz generujem nejak takto:

<a n:href="Post:show $post->id, $template->webalize($post->title)">{$post->title}</a>

A tým pádom si aj musím predať parameter navyše v presenteri:

public function renderShow($id, $slug)

Nezdá sa mi, že je to to práve riešenie, nie je niečo jednoduchšie a viac efektívnejšie? Takisto ako vyriešim to, že ak mám tvar povedzme /1-ahoj-svet a ja zadám /1-ahoj tak ma to presmeruje na ten správny tvar, t.j. /1-ahoj-svet? V návode je spomenutá kanonizace, ale kde a ako mám nastaviť to, že táto URL je tá správna?

Ďakujem za každú pomoc.

Editoval Lkopo (12. 10. 2014 15:26)

japlavaren
Člen | 404
+
0
-

kanonizacia funguje trocha inak:

ak mas viac rout na rovnaky signal, matchne sa ti podla url.
potom sa vytvori nova routa (prva podla zoznamu ktora vedie na signal), porovna sa s tou, ktora sa matchla a ak su rozdielne, presmeruje sa. toto je kanonizacia

to co ty hladas je skor presmerovanie na spravnu adresu. ak podla #id zaznam, ale url je ina presmeruj pomocou

<?php
public function actionShow($id, $url)
{
	$item = $this->model->load($id);

	if(!$item) {
		throw new BadRequestException();
	}

	if($item->url != $url) {
		$this->rediredt(301, 'this', array('url' => $item->url));
	}
}
?>

Editoval japlavaren (12. 10. 2014 16:37)

Lkopo
Člen | 65
+
0
-

Ďakujem, táto metóda funguje, len ma napadlo, či to nie je možné už nastaviť v routingu? Poprípade sa zbaviť tohto škaredého zápisu:

<a n:href="Post:show $post->id, $template->webalize($post->title)">{$post->title}</a>