Problém s routou a přesměrováním
- Dtx
- Člen | 17
Zdravím,
nedaří se mi napsat routu pro obsloužení url ve tvaru
mujweb.cz/c23-nazev-clanku
kde c23 znamená článek s id 23 a zbytek je název článku
Použil jsem toto: (nic lepšího mě nenapadlo, s nette teprve začínám)
$router[] = new Route('c<? [0-9]* >-<? .* >', array(
'module' => 'Front',
'presenter' => 'Article',
'action' => 'show',
'id' => NULL,
));
Tento zápis správně odkazuje na Front_ArticlePresenter, ale vždycky mě
to přesměruje na url ve tvaru mujweb.cz/c-
takže z url vlastně zmizí to, co je v definici routy mezi
<? a > , takže ty reguláry.
Jak z toho ven? Zkusil jsem přidat parametr Route::ONE_WAY, ale to mě zase
pak přesměruje na url
mujweb.cz/front.article/show/
Jsem z toho už trochu jelen :) Může mi někdo prosím poradit, co kam
napsat a případně proč, aby mi konečně doteklo, jak to vlastně
funguje?
Díky, Dtx
Editoval Dtx (28. 1. 2011 16:43)
- Jakub Lédl
- Člen | 55
Myslím, že Foo parametry nejsou zahrnuty v generované URL (a navíc není jejich hodnota předána presenteru). Chce to použít normální pojmenované parametry.
- Jakub Lédl
- Člen | 55
No, v tvém případě:
<?php
$router[] = new Route('c<id [0-9]*>-<title .*>', array(
'module' => 'Front',
'presenter' => 'Article',
'action' => 'show',
'id' => NULL
));
?>
Pojmenované parametry jsou v tomto případě id
a
title
a přesně pod tímto jménem se dostanou do presenteru,
tudíž metoda actionShow
(a renderShow
) by měla
vypadat takto:
<?php
class ArticlePresenter {
...
public function actionShow($id = NULL, $title = NULL) {
}
}
?>
a odkaz potom generuješ takto:
{link Article:show, id => 23, title => 'nazev-clanku'}
nebo rovnou
{link Article:show, 23, 'nazev-clanku'}
- Dtx
- Člen | 17
Jakub: Super, díky za vysvětlení. S těmito parametry jsem taky experimentoval a výsledek byl stejný jako teď, když zkouším ten příklad od tebe – a to, že přesměruje na adresu mujweb.cz/c23-nazev-clanku%2F – vždy tedy přidá na konec %2F a stránka vyhodí 404 Not Found :| Do presenteru do actionShow a renderShow si ty parametry předávám.
Editoval Dtx (28. 1. 2011 17:15)
- Jakub Lédl
- Člen | 55
%2F je zakódovaný znak /, a to že tě to
na tu adresu automaticky přesměruje bych tipoval na to, že Nette bere tuto
adresu jako kanonickou. Zkus do BasePresenter
u nebo v
ArticlePresenter
u napsat
<?php
public $autoCanonicalize = FALSE;
?>
a napiš, co to udělá.
Editoval Jakub Lédl (28. 1. 2011 17:22)