Jak donutit router, aby akceptoval nulu jako <id>
- freon
- Člen | 4
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
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
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
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
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)