FILTER_IN odmítnutí routy
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- David Matějka
- Moderator | 6445
ukaz prosim celou definici routy.
A muzes zkusit pouzit globalni filtry, tedy neco jako
new Route(..., array(
NULL => array(
Route::FILTER_IN = function($params) {
if(vse_ok()) {
return $params;
} else {
return NULL;
}
}
)
);
- vasam
- Člen | 26
Moje routa:
$router[] = new Route('<pageId>', array(
'presenter' => 'Page',
'action' => 'default',
'pageId' => array(
Route::VALUE => $defaultId,
Route::FILTER_IN => array($this->pageList, 'slugToId'),
Route::FILTER_OUT => array($this->pageList, 'idToSlug'),
Route::PATTERN => '.*?'
)
));
Potřebuji v slugToId
dát routě nějak vědět, že pro daný
slug neexistuje článek.
Editoval vasam (3. 9. 2014 10:53)
- vasam
- Člen | 26
Tak jsem to zatím pořešil takto:
$router[] = new Route('<pageId>', array(
'presenter' => 'Page',
'action' => 'default',
'pageId' => array(
Route::VALUE => $defaultId,
Route::FILTER_OUT => array($this->pageList, 'idToSlug'),
Route::PATTERN => '.*?'
),
NULL => array(
Route::FILTER_IN => function ($params) use ($defaultId) {
if ($params['pageId'] !== $defaultId)
{
$params['pageId'] = $this->pageList->slugToId($params['pageId']);
if ($params['pageId'] === NULL) { return NULL; }
}
return $params;
}
)
));
Nejsem si ale jist, jestli je to čisté a pěkné řešení (mně se teda moc nelíbí ;-)).