如何避免使用Symfony和区域设置路由重复内容?

时间:2014-06-17 09:42:23

标签: http symfony annotations routes

我在symfony 2.5中遇到了语言环境路线问题。 让我们说我的默认语言是英语。我的示例路由是/ user / register /。如果我在没有任何语言环境的情况下请求它,它应该出现英文翻译。如果我使用区域设置(例如/ fr / user / register /)请求它,它应该与它一起出现。这可以通过以下方式完成:

/**
 * @Route("/{_locale}/user/register/")
 * @Route("/user/register/")
 * @Template()
 */
public function registerAction(Request $request)
{
    $locale = $request->getLocale();
    $translated = $this->get('translator')->trans('test.output');

    echo $locale."<br>".$translated;
    exit();
}

现在我要对此提出疑问:

  • 如何简单地避免用户可以使用默认语言作为区域设置来调用路由?在我的示例中,english是默认语言,因此/ en / user / register /将具有与/ user / register /相同的输出。我不想在每个控制器动作中进行301重定向!
  • 使用一个路径注释是否没有简单的方法来注释带或不带语言环境的路由?

2 个答案:

答案 0 :(得分:1)

您可以添加路线要求,例如:

 * @Route("/{_locale}/user/register/", requirements={"_locale" = "fr|it"})

有了这个,只有那些选项,那里列出的内容可以放入_locale占位符

编辑:

我现在明白你的问题。那么这里是您的解决方案: JsmI18n

答案 1 :(得分:1)

我知道这可以通过JMSI18nRoutingBundle来实现。不仅如此,您还可以使用以下案例:

/contact       # For English language
/de/kontakt    # For German