Routing – id, slug a kanonizace
- Lkopo
- Člen | 65
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
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)