Překlad rout pomocí globálních filtrů
- honza18
- Člen | 2
Snažím se vytvořit routu pro blog, tak aby fungovala pro různé jazykové verze. V šabloně potřebuji generovat link na samotnou stránku v různých jazycích – např. blog/clanek-1 a blog/article-1. Pokud ovšem v daném jazyku neexistuje ekvivaletní článek s daným url neexistuje (např. pro article-2 neexistuje clanek-2) , chci vygnerovat url /blog/.
Výsledkem je ale chyba
Invalid link: No route for Front:Blog:article(locale=cs, article=article-2)
Mohl by prosím někdo poradit, co dělám v globálních filtrech špatně, nebo zda je v postupu nějaká zásadní chyba?
V šabloně:
{link //this, locale => 'cs'}
{link //this, locale => 'en'}
Router:
$router->addRoute(
'/cs/blog[/category/<category>]',
[
'locale' => 'cs',
'module' => 'Front',
'presenter' => 'Blog',
'action' => 'blog',]
);
$router->addRoute(
'/blog[/category/<category>]',
[
'locale' => 'en',
'module' => 'Front',
'presenter' => 'Blog',
'action' => 'blog',]
);
$router->addRoute('[<locale=en>/]blog/<article>', [
'module' => 'Front',
'presenter' => 'Blog',
'action' => 'article',
null => [
Route::FILTER_IN => function (array $params): array
{
return $params;
},
Route::FILTER_OUT => function (array $params) use($articleModel) : array
{
$urlLocale = $articleModel->getUrlOfLangEquivalentArticle($params['article'], $params['locale']);
if($urlLocale != null) {
$params['article'] = $urlLocale;
return $params;
}
unset($params['article']);
$params['action'] = 'blog';
return $params;
},
],
]);
- Michal Kumžák
- Člen | 106
Nechybí v těch routách [/<action>]? A ten <article> by měl být asi taky nepovinný.