Jak donutit router, aby akceptoval nulu jako <id>

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

Zdravím,

jak prosím donutit Nette, aby bralo jako id v routě i samotnou nulu?

Výchozí routa ze skeletonu…

<?php
$router[] = new NRoute('<presenter>/<action>[/<id>]', 'Homepage:default');
?>

ani když explicitně uvedu rozsah regexpem i odstraním nepovinnost…

<?php
$router[] = new NRoute('<presenter>/<action>/<id [0-9]+>', 'Homepage:default');
?>

… samotnou nulu jako např. v url /alphabet/numbers/0 neakceptují.
Provede se jen to samé jako /alphabet/numbers.

Mikulas Dite
Člen | 756
+
0
-

A proč to vůbec potřebuješ? Je zvykem číslovat id od jedničky a většina databází to tak doufám dělá.

(Máš tam ještě jiné routy?)

freon
Člen | 4
+
0
-

Jedna věc je, zda ve výchozím případě za použití např. autoinkrementačního sloupce DB čísluje od jedničky, druhá věc je, zda je nula platné číslo řádku a může být tedy klidně použito a aplikace ho musí brát v potaz. Nicméně v mém případě se jedná o něco jiného.

Jde mi o případ, kdy nula v URL není id řádku v DB, ale symbol abecedy, jehož vysvětlující stránka se má zobrazit (výuka abecedy a čísel).

Jiné routy nemám, budu je kompletně řešit až později, ale když jsem narazil na problém, že mi to neakceptuje tu nulu, začal jsem se tomu věnovat.

Link mi to vygeneruje v pořádku, jen ho to pak neakceptuje.

<a n:foreach="$numbers as $number" n:href="Dictionary:alphabet $number">{$number}</a>
freon
Člen | 4
+
0
-

Ještě bych rád doplnil, že ani když změním ve vykreslovací metodě názvy parametrů, takže pak půjdou z querystringu, např. /dictionary/show?category=abeceda&term=0, ani to nedonutí brát nulu pro parametr term v potaz a provede se to samé jako /dictionary/show?category=abeceda.

Dle mého názoru je to bug. Může to prosím někdo potvrdit, příp. vysvětlit, proč je to feature?

Editoval freon (16. 5. 2011 16:12)

Tharos
Člen | 1030
+
0
-

Tak jsem si to vyzkoušel v sandboxu (2.0-dev released on 2011–03–10) a mně to myslím funguje korektně. Mám URL /homepage/default/0 a HomepagePresenter s výpisem $this->getParam('id') a vypisuje mi to korektně string 0.

Editoval Tharos (16. 5. 2011 16:23)

Tharos
Člen | 1030
+
0
-

Píšeš, že se provede se to samé, jako bez té nuly, ale to je přece správně – spustí se ten samý presenter a vykoná se ta samá akce/view. Pokud chceš například vykreslit jinou šablonu pro detail, musíš v presenteru použít třeba konstrukci $this->setView('...'), anebo přepsat routu třeba v podobném duchu:

$router[] = new NRoute('<presenter>[/<action>/<id>]', 'Homepage:default');

Editoval Tharos (16. 5. 2011 16:31)

freon
Člen | 4
+
0
-

Ach, Mea culpa!! Já jsem samozřejmě očekával, že se spustí stejná akce, ale měl jsem chybu v šabloně.

Díky za nakopnutí, přecejenom si s Nette ještě netykám.