$presenter->isLinkCurrent(), filtry v routru a entita
- BigCharlie
- Člen | 283
Mám routu, kde ve filtrech překládám slug na entitu a obráceně. Problémem je, že mi $presenter->isLinkCurrent() „ignoruje“ entitu, kterou posílám jako parametr.
Routování jinak funguje správně, entity se překládají na slug a obráceně…
Příslušná routa
$router[] = new Route('<lang cs|en>/<slug .*>', [
'module' => 'Front',
'presenter' => 'Page',
'action' => 'default',
'slug' => '/',
NULL => [
Route::FILTER_IN => function ($params) use ($slugService) {
$params['page'] = $slugService->findBySlug($params['lang'], $params['slug']);
if (!$params['page']) {
throw new BadRequestException();
}
unset($params['slug']);
return $params;
},
Route::FILTER_OUT => function ($params) use ($slugService) {
if ($params['presenter'] !== 'Page' && $params['action'] !== 'default') {
return NULL;
}
$params['slug'] = $slugService->getSlug($params['lang'], $params['page']);
unset($params['page']);
return $params;
},
]
]);
$presenter->isLinkCurrent('Page:default', $entA)
a
$presenter->isLinkCurrent('Page:default', $entB)
vrací obě
TRUE.
Četl jsem jedinou diskusi, kterou jsem našel, ale nepomohla.
- BigCharlie
- Člen | 283
Bohužel nefunguje, taky mě to napadlo. Tohle přitom funguje:
// jsem na /cs/entA-url/
// TRUE
$this->isLinkCurrent('Page:default', [
'lang' => 'cs',
'page' => $entA,
]);
// FALSE
$this->isLinkCurrent('Page:default', [
'lang' => 'en',
'page' => $entA,
]);
Takže to reaguje na parametr lang, ale page to s klidem ignoruje…
$entA
, $entB
jsou dvě různé entity –
vygenerují se dvě různé adresy, otestováno.
Editoval BigCharlie (27. 1. 2016 11:59)
- David Matějka
- Moderator | 6445
problem je tady, http_build_query se moc nekamaradi s objekty a exportuje pouze public properties: https://3v4l.org/U57Fa, ktery u entit casto nejsou zadne, takze vysledkem pro porovnani je prazdny retezec
- BigCharlie
- Člen | 283
Aha, tudíž nikoliv chyba na mé straně, ale chyba/požadované chování na straně frameworku.
Takže nezbývá než porovnávat vygenerované url?