Symfony 默认情况下,路由中的变量工作正常,但在它键入的URL中不可见

Symfony 默认情况下,路由中的变量工作正常,但在它键入的URL中不可见,symfony,url,routing,routes,Symfony,Url,Routing,Routes,由于我的URL,我可以知道用户在寻找哪种语言和哪种文章,例如:article/id\u aritce/Title\u of\u article/FR 如果用户没有使用语言信息编写url,我将在routing.yml文件中设置默认值 Site_Article: path: /article/{id}/{article_title}/{language} defaults: {_controller: SiteBlogBundle:Blog:article, language: EN} 它

由于我的URL,我可以知道用户在寻找哪种语言和哪种文章,例如:article/id\u aritce/Title\u of\u article/FR

如果用户没有使用语言信息编写url,我将在routing.yml文件中设置默认值

Site_Article:
path:     /article/{id}/{article_title}/{language}
defaults: {_controller: SiteBlogBundle:Blog:article, language: EN}
它工作得很好。。。。
但是如果我输入URL文章/3/Titleofarticle/EN,那么EN将从URL中删除。这不是我想要的。(我仍然得到正确的页面,该页面显示的是英语,但仍然希望在URL中看到它。)

您不能为
EN
区域设置提供默认值,键入时它始终在URL中

但是在本例中,要在没有任何语言环境的情况下启用route
/article/{id}/{article_title}
,您需要再创建一个完全没有此参数的路由。在这种情况下,Symfony将根据您在
config.yml

您的路由配置必须如下所示:

Site_Article_With_Locale:
    path:     /article/{id}/{article_title}/{_locale}
    defaults: {_controller: SiteBlogBundle:Blog:article}

Site_Article:
    path:     /article/{id}/{article_title}
    defaults: {_controller: SiteBlogBundle:Blog:article}

我的问题是,当我键入URL==>“article/id/article\u title/EN”时,URL会自动重写并显示==>“article/id/article\u title”(没有提到EN,但我希望它显示在URL事实中!)我解决了你的问题,并发布了一些工作示例。抱歉,我不想在config.yml中为这个示例使用局部变量集,因为这是我网站的一部分,语言不同于局部变量OK。将
\u locale
重命名为
lang
,并在控制器中进行检查。如果已设置,则只需使用提供的值即可。如果为空,则在所需位置将其设置为默认值。