Překlad rout pomocí globálních filtrů

honza18
Člen | 2
+
0
-

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
+
0
-

Nechybí v těch routách [/<action>]? A ten <article> by měl být asi taky nepovinný.

honza18
Člen | 2
+
0
-

Michal Kumžák napsal(a):

Nechybí v těch routách [/<action>]? A ten <article> by měl být asi taky nepovinný.

Action tam rozhodně nechybí, nevidím důvod proč by měl v routě být. <article> je povinný schválně.