Problém s routou a přesměrováním

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

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
+
0
-

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.

https://doc.nette.org/…tion/routing#…

Dtx
Člen | 17
+
0
-

Jakub: Na to, na co odkazuješ, jsem čučel asi čtvrt hodiny a nic jsem z toho nevykoumal :|
Můžeš prosím uvést příklad těch „normálních pojmenovaných paramentrů“ konkrétně na tomto případě?

Jakub Lédl
Člen | 55
+
0
-

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'}
Jan Tvrdík
Nette guru | 2595
+
0
-

c<id>-<slug>?

Dtx
Člen | 17
+
0
-

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
+
0
-

%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 BasePresenteru nebo v ArticlePresenteru napsat

<?php

public $autoCanonicalize = FALSE;

?>

a napiš, co to udělá.

Editoval Jakub Lédl (28. 1. 2011 17:22)

Dtx
Člen | 17
+
0
-

No tak konečně se to probralo. Někdy to tu chvíli trvá, než se změny projeví.. Předtim jsem vymazal Cache firefoxu, stejně tak temp adresář, ale nešlo to, teď to po nějakym čase začalo chodit. Takže Jakube, díky, jede to pěkně ;)

Jakub Lédl
Člen | 55
+
0
-

Velmi rádo se stalo a mnoho štěstí s Nette ;-)