我遇到了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.
我的错误是什么?
感谢您的帮助
答案 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 mylist
和Request
。
因此,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 } : {}))}}