Jak na routy využívající databázi s lomítky v uri

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

Potřeboval bych poradit, jak na routy v případě, že parametr „uri“ obsahuje zpětná lomítka. Tedy aby se mi generovalo např. eshop.cz/produkt/hracky/plynove-masky, přičemž to „/hracky/plynove-masky“ bych potřeboval načítat ze sloupce „uri“ v databázi.

Aktuálně nemám problém, pokud uri neobsahuje zpětná lomítka, tedy např. eshop.cz/produkt/motorova-pila se načte v pohodě. V bootstrapu mám následující:

$container->router[] = new Route('produkt/<id>', array(
        'id' => array(
        Route::FILTER_IN => function($id) use ($container) {
            if (is_numeric($id)){
                return $id;
            }else{
             /** @var $pages \Nette\Database\Table\Selection */
             $pages = $container->createPages();
             return $pages->where('uri', $id)->fetch()->id;
                }
            },
        Route::FILTER_OUT => function($id) use ($container) {
            if (!is_numeric($id)){
                return $id;
            }else {
             /** @var $pages \Nette\Database\Table\Selection */
             $pages = $container->createPages();
             return $pages->get($id)->uri;
            }
            }
        ),
        'module' => 'Front',
        'presenter' => 'Produkt',
        'action' => 'default',
   ));

Neporadil by někdo, jak to pořešit, aby to šlo i s těmi lomítky?

Zkoušel jsem už změnit Route(‚produkt/<id>‘…) na Route(‚produkt/<id .*?>‘…), ale bez úspěchu.

jiri.pudil
Nette Blogger | 1029
+
0
-

.*? je nesmysl. Umaž otazník.

reskator
Člen | 18
+
0
-

Supr, díky.

David Grudl
Nette Core | 8218
+
0
-

.*? lze použít, ale bude se ti přidávat na konec ještě jedno lomítko. Nejsprávnější je .+