Routování a objekty (neskalární parametry)
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- Jan Jakeš
- Člen | 177
Existuje nějaký důvod, proč neskalární parametry v routě nejsou zpracovány FILTER_OUT?
Používám něco jako:
$frontRouter[] = new Route('<id>/<action>', [
'presenter' => 'Page',
'action' => 'default',
'id' => [
Route::PATTERN => '[^/]+',
Route::FILTER_IN => function ($url) use ($container) {
return $container->doctrine->orm->entityManager
->getRepository(Ajat\Model\Entities\Page::getClass())
->findOneByUrl($url);
},
Route::FILTER_OUT => function (Ajat\Model\Entities\Page $page) {
return $page->url;
}
]
]);
Což mi umožňuje elegantní věci jako:
public function actionDefault(Ajat\Model\Entities\Page $id)
{
...
}
Nebo například v šablonách ($page je zde Doctrine entita Ajat\Model\Entities\Page):
<a n:href="Page: $page">Odkaz</a>
Jenže kvůli zmíněnému řádku v Route toto nefunguje.
Editoval Juan (21. 9. 2012 19:58)
- Filip Procházka
- Moderator | 4668
Nějaký tam je, ale myslím že je to především fault-barier. Btw, tohle afaik nestačí, ještě zpracování parametrů v presenteru je zahazuje taky. Testoval jsi to?
- David Grudl
- Nette Core | 8218
Teoreticky by se if (!is_scalar($params[$name]))
mohlo nahradit
za if (is_object($params[$name]))