清理Symfony 3框架的设置,从这里添加了语言环境监听器: http://symfony.com/doc/current/cookbook/session/locale_sticky_session.html
示例操作代码:
/**
* @Route("/foo/")
* @Route("/{_locale}/foo/", name="foo", requirements={"_locale"="en|ru|tk"})
*/
public function fooAction(Request $request)
{
return new Response('true');
}
必须为每个操作重复此语法。有没有办法在不使用Bundle的情况下减少冗长?如果可能的话,我希望requirements
部分驻留在某个配置中。
理想情况下,我想将defaults={"_locale"="en"}, requirements={"_locale"="%allowed_locales%"}
部分移动到Locale Listener中,但是从我尝试的内容来看,似乎在路由匹配后调用了侦听器,因此不是可能,真的很遗憾。
答案 0 :(得分:2)
是的,请查看Symfony Translations文档中How to Use Service Container Parameters in your Routes链接的The Locale and the URL,并说明:
阅读如何在路由中使用服务容器参数,以了解如何避免在所有路由中对_locale要求进行硬编码。
您实际上可以在全局参数中设置这些路由,如下所示:
# app/config/config.yml
parameters:
app.locales: en|ru|tk
然后在您的路线注释中执行以下操作:
/**
* @Route("/foo/")
* @Route("/{_locale}/foo/", name="foo", requirements={"_locale"="%app.locales%"})
*/
public function fooAction(Request $request)
{
return new Response('true');
}
我不确定为什么文档只显示用于在YAML / XML / PHP中定义路由,但它应该使用注释工作相同。