Symfony路由“_locale”参数不被接受

时间:2015-08-28 12:14:04

标签: symfony routing multilingual

我遇到了symfony路由问题。

对于多语言项目,我通过作业队列呈现Twig模板以进行邮寄。在此模板中,链接指向需要“_locale”参数的路径,例如“de”或“en”。我使用函数“{{url('route',{'_ locale':'de'})}}”来生成网址。

通过渲染模板,我收到以下错误消息:

[Twig_Error_Runtime]
An exception has been thrown during the rendering of a template ("Some mandatory parameters are missing ("_locale") to generate a URL for route "Route".") in "TemplatePath" at line 5. 

我的错误是什么?

感谢您的帮助

3 个答案:

答案 0 :(得分:0)

现在是死灵时间了:) 我只是在这里猜测,但是您可以尝试几种方法。

您可以在命令中设置语言环境吗?

设置翻译器包的语言环境:

$this->getContainer()->get('translator')->setLocale('de');

设置此会话的语言环境:

$this->getContainer()->get('session')->setLocale('de);

Symfony 4.1及更高版本的国际化路由

如果这适用于您,请尝试以下操作:

url('route.de', {'_locale': 'de'}) }}"

您的路线是否设置了“ de”和“ en”?

/**
 * Matches /route
 * @Route(
 *     "/route/{_locale}",
 *     requirements={
 *         '_locale': 'en|de'
 *     },
 *     name="route"
 * )
 */

这是一个古老的问题,但这可能会帮助某人。

答案 1 :(得分:0)

通过CLI生成URL路由时,Symfony内核缺少HTTP mylistRequest

因此,URL生成器找不到Routing->RequestContext参数。

要对其进行修复,必须手动创建一个_locale,因此,在命令中:

RequestContext

答案 2 :(得分:-1)

class BaseCommand extends ContainerAwareCommand
{
    protected function getLocale()
    {
        return $this->getContainer()->get('translator')->getLocale();
    }

    protected function render($view, $data)
    {
        return $this->getContainer()->get('templating')->render($view, $data);
    }
}  

在命令中

class SomeCommand extends BaseCommand
{
    ...
    $this->render($view, array_merge($data, ['_locale' => $this->getLocale()])
}

可见

{{url('any', {param: 'foo'}|merge(_locale is defined ? {'_locale': _locale } : {}))}}