当前位置: 首页 > 知识库问答 >
问题:

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

白智
2023-03-14

我在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();
}

现在我必须回答以下问题:

  • 我如何简单地避免用户可以使用默认语言作为区域设置来调用路由?在我的示例中,英语是默认语言,因此/en/user/register/将具有与/user/register/相同的输出。我不想在每个控制器操作中进行301重定向

共有2个答案

沈嘉瑞
2023-03-14

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

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

这样,只有那些选项,也就是列出的选项,才能放在_locale占位符中

编辑:

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

戴鸿羽
2023-03-14

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

/contact       # For English language
/de/kontakt    # For German  
 类似资料:
  • 我在我的注解里有。yaml使用注释管线设置的以下设置: 我这里的问题是,我可以创建一个像是否不带区域设置前缀? 这是保护区,我可以使用用户语言。我尝试使用这个symfony路由文档,但我希望保留注释。 目前它看起来像,但我希望。

  • 在源服务(“cluster_a”)和目标服务(“cluster_b”)之间启用区域感知路由需要执行几个步骤。 在源服务上的Envoy配置 本节介绍与源服务并行运行的Envoy配置。这些要求是: Envoy必须使用--service-zone选项启动,该选项定义了当前主机的区域。 源和目标集群的定义都必须具有sds类型。 local_cluster_name必须设置为源群集。 以下配置中仅列出了集群

  • 问题内容: 我在尝试创建一个 Connection 对象来处理来自命令行Java应用程序和Oracle数据库的连接时遇到以下问题。 因此,我有一个 Main 类,其中包含 main() 方法,这是一个: 问题是当我尝试执行此指令时: 我得到这个异常: 因此,我记得在其他与此数据库一起使用的应用程序中,有必要设置时区或类似的内容(但现在我无法访问这些应用程序)。 那么,如何解决此问题?我可以通过编程

  • 我安装了三个区域设置捆绑包: JMSi18nRoutingBundle 我的如下所示: 一切都按我的喜好工作,除了我在日志中发现了一个错误: 在堆栈中我发现:的区域设置,但是,我不明白如何将区域设置设置为“en_US”。 我想它来自于对Lunetics的猜测,但是有“en_US”的人应该匹配“en”,而不是“en_US”。 我的主要问题是,我不知道如何跟踪这一点。当我用自己的设置连接到主页时,首先

  • 我只在个人项目中使用symfony路由组件(没有完整的symfony框架)。我的方法是:在文件如下: 我的路由工作正常,但我需要添加自动区域设置前缀uri/路由多语言系统像这样: 如何在文件并删除默认的区域设置前缀语言?!

  • 我使用for循环将学生详细信息添加到ArrayList。当我给第二个学生提供详细信息时,它会覆盖第一个数据。螺柱类 将数据添加到ArrayList的主类。 输出:第二个数据[2,2]后的实际输出辊数[1]。预期输出应为卷号: A1姓名: F1 L1性别:男性年龄: 11体育赛事:标枪 报名号:A2姓名:F2 L2性别:女年龄:14体育项目:100米跑 报名号:A3姓名:F3 L3性别:男性年龄:1