Příklad routování z Quickstart funguje jen z poloviny

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

Zdravím,

zkoušel jsem si udělat todolist podle tutorialu v Quick start.. vše funguje dobře, až na routování
v příkladu je toto

<?php
$router = $application->getRouter();
Route::addStyle('do');
Route::addStyle('showDoneTasks'); // action nepřidáváme, protože action si nette přidává samo
Route::setStyleProperty('action', Route::FILTER_TABLE, array(
    'pridat-ukol' => 'add',
));
Route::setStyleProperty('do', Route::FILTER_TABLE, array(
    'smazat' => 'delete',
    'zmenit' => 'changeState',
    'submit' => 'todoForm-submit'
));
Route::setStyleProperty('showDoneTasks', Route::FILTER_TABLE, array(
    'hotove-ukoly' => 1, // 1 jako TRUE
));






$router[] = new Route('', array(
    'presenter' => 'Todolist',
    'action' => 'show'
));

$router[] = new Route('[<action>/]<do smazat|zmenit|submit>/<id>', array(
    'presenter' => 'Todolist',
    'action' => 'show',
    'id' => NULL,
));

$router[] = new Route('<action pridat-ukol>', array(
    'presenter' => 'Todolist',
));

$router[] = new Route('[<showDoneTasks 0|hotove-ukoly>/][strana-<vp-page>]', array(
    'presenter' => 'Todolist',
    'action' => 'show',
    'showDoneTasks' => 0,
    'vp-page' => 1,
));
?>

ovšem jediné routy, které fungují jsou ta základní a <action pridat-ukol>.. ostatní adresy zůstávají stále v nekůl formě (?id=5&do=delete …).. Hrál jsem si s tím všemožně, ale na nic jsem nepřišel (jak taky, když tomu skoro nerozumím).

Díky
(vím, psal jsem už do komentářů k quickstart, ale tady to asi sleduje více lidí a mně už to skoro nedá spát.. takže pardon za kopii :))

Používám Nette verze 0.9.5 pro PHP 5.3

Editoval Skalda (2. 7. 2010 20:11)

Ola
Člen | 385
+
0
-

Mno tady je live demo: http://nette-quickstart.hys.cz/, na kterém to funguje ok – ty zdrojáky jsou identické. Ale je tam nějaká starší verze Nette.

Skalda
Člen | 8
+
0
-

Vyzkoušel jsem to ve verzích 0.9.2 – 0.9.5 a furt stejné… ve verzi 0.9.1 už to nefunguje vůbec (vyskočí chyba „Parameter ‚action‘ must not be optional because parameters standing on the right side are not optional.“)

Patrik Votoček
Člen | 2221
+
0
-

A u které z těch rout ti to vyskočí?

Skalda
Člen | 8
+
0
-

[<action>/]<do smazat|zmenit|submit>/<id>
ale opět zdůrazňuji, že chyba vyskočí jen v Nette verze 0.9.1 a nižší

Skalda
Člen | 8
+
0
-

Ještě jedna poznámka, kterou jsem teď zjistil… ty odkazy ve tvaru /smazat/1 nebo /hotove-ukoly fungují, jen se nedosazují do atributů href a pokud je zadám přímo do adresní řádky tak se to sice vykoná, ale adresa se opět znekůlovatí

Skalda
Člen | 8
+
0
-

Nemohl by někdo dát hotové funkční zdrojáky Quickstart ke stažení, abych vyzkoušel, jestli to funguje a případně porovnal kde mám sakra chybu…

Skalda
Člen | 8
+
0
-

:) 8 příspěvků v tématu a z toho 6 mých :D… Každopádně se mi podařilo vyřešit to..
stačilo odstranit první routu

$router[] = new Route('', array(
    'presenter' => 'Todolist',
    'action' => 'show'
));

Bralo jí to vždy přednostně před ostatními… Ať žije debugger (přesněji ten panel) v Nette 1.0 (nešel by ten panel vložit i do nynější stabilní verze ?)