Nastavení action při zadaném ID

- pux
- Člen | 14
Pokračuji v problému z předchozího
příspěvku, kdy chci načíst detail view, pokud je na
nějaké stránce zadané ID. Moje routa vypadá:
[<locale=cs [cs|en]{2}>/]<presenter>[/<id>]
A potřebuji funkční vícejazyčné adresy ve tvaru:
// Clanky:default
example.com/clanky
example.com/en/articles
// Clanky:detail
example.com/clanky/foo-bar
example.com/en/articles/foo-bar
Zkouším toho dosáhnout pomocí globálních filtrů (kde už překládám
u anglické verze clanky na articles):
// Použito u FILTER_IN i FILTER_OUT
if (isset($params['id']) && $params['id']) {
$params['action'] = 'detail';
}
A samozřejmě mám v ClankyPresenter i adekvátní
metodu:
public function renderDetail(string $id): void
{
// ...
}
Pokud ale zadám adresu example.com/clanky/foo-bar, končím na
chybě:
Invalid link: No route for Clanky:detail(locale=cs, id=foo-bar)
To stejné, pokud se na detail článku snažím generovat odkaz jinde
v šabloně pomocí <a n:href="Clanky:detail $id">, končím
na stejné chybě (jen je v parametrech prohozeno id a
locale).
locale mám jako persistentní parametr presenteru a u
renderDefault metody ho v parametrech taky nemám, proč se mi cpe
do renderDetail a navíc problém nevyřeší ani to, když ho tam
(nerad) předám? Nebo na to jdu úplně špatně?

- pux
- Člen | 14
Tak zatím jediné, co se zdá, že funguje, je udělat dvě hardcoded routy:
$router->addRoute('clanky/<id>', [
'presenter' => 'Clanky',
'action' => 'detail',
'locale' => 'cs',
]);
$router->addRoute('en/articles/<id>', [
'presenter' => 'Clanky',
'action' => 'detail',
'locale' => 'en',
]);
Pokud by to šlo ale zapracovat do té jedné (protože mám za to, že by to mělo fungovat), budu rád za tip.