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
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.
- David Grudl
- Nette Core | 8218
.*? lze použít, ale bude se ti přidávat na konec ještě jedno lomítko.
Nejsprávnější je .+