如何定义路由需求

编辑该页面

警告:你浏览的文档欧宝官网下载appob娱乐下载Symfony 3.3,不再维护。

这个页面的更新版本Symfob娱乐下载ony 6.2(当前的稳定版本)。

如何定义路由需求

路线的需求可用于制造特定的路线只有在特定的条件下比赛。举个最简单的例子包括限制路由{通配符}只匹配一些正则表达式:

  • 注释
  • YAML
  • XML
  • PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
/ / src / AppBundle /控制器/ BlogController.php名称空间AppBundle\控制器;使用ob娱乐下载\\FrameworkBundle\控制器\控制器;使用Sensio赞助\\FrameworkExtraBundle\配置\路线;BlogController扩展控制器{/ * * *@Route(“/博客/{页面}”,name = " blog_list "需求={"页面" = " \ d + "}) * /公共函数listAction(美元页面){/ /……}}

多亏了\ d +要求(即任何长度的“数字”),/博客/ 2这个路线,但比赛吗/博客/一些字符串匹配。

为什么你会关心需求?如果一个请求匹配两个路线,那么第一个路线总是赢家。通过增加需求到第一个路线,你可以让每个路由匹配在合适的情况下。看到路由了一个例子。

自正则表达式参数要求,每个需求的复杂性和灵活性是完全取决于你。假设您的应用程序的主页上有两种不同的语言,基于URL:

  • 注释
  • YAML
  • XML
  • PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14
/ / src / AppBundle /控制器/ MainController.php/ /……MainController扩展控制器{/ * * *@Route(“/ {_locale}”,默认= {“_locale”=“en”},需求= {*“_locale”=“en | fr”*}) * /公共函数homepageAction(美元_locale){}}

为传入请求{_locale}部分的URL匹配正则表达式(en | fr)

路径 参数
/ {_locale}=“en”
/ en {_locale}=“en”
/ fr {_locale}=“fr”
/ es 这条路不匹配

请注意

因为Symfob娱乐下载ony 3.2,您可以启用utf - 8路由匹配通过设置use utf8选择当声明或进口路线。这将使如在需求匹配任何utf - 8字符而不是单个字节。每当路线选择是自动启用或使用任何非ascii utf - 8字符或要求PCRE Unicode财产(\ p {xx},\ P {xx}X \)。注意,这个行为是弃用LogicException将被扔在4.0,除非您显式打开吗use utf8选择。

提示

路线的需求还可以包括容器参数,如在解释道这篇文章。这方便当正则表达式很复杂,在应用程序中重复使用。

添加HTTP方法需求

除了URL,您还可以匹配的方法传入的请求(例如,头、POST、PUT、DELETE)。假设您创建一个API来你的博客,你有两个路线:一个用于显示一篇文章(GET或头上请求),一个用于更新一篇文章(PUT请求)。这可以通过以下路线配置:

  • 注释
  • YAML
  • XML
  • PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21日22日23日24日25日26日
/ / src / AppBundle /控制器/ BlogApiController.php名称空间AppBundle\控制器;使用Sensio赞助\\FrameworkExtraBundle\配置\方法;/ /……BlogApiController扩展控制器{/ * * *@Route(“/ api /文章/ {id} ") *@Method({“得到”、“头”})* /公共函数showAction(美元id){/ /……后返回一个JSON响应}/ * * *@Route(“/ api /文章/ {id} ") *@Method(“”)* /公共函数editAction(美元id){/ /……编辑一篇文章}}

尽管这两个航线有相同的路径(/ api /文章/ {id}),第一个将匹配只有或请求路由和第二只匹配把请求路由。这意味着您可以显示和编辑这个职位相同的URL,而使用不同的控制器的两个动作。

请注意

如果没有方法指定的路线将匹配所有方法。

提示

如果你使用HTML表单和HTTP方法其他得到帖子,你需要包括一个_method参数假的HTTP方法。看到如何改变一个表单的动作和方法为更多的信息。

添加一个主机的要求

你也可以匹配HTTP主机传入的请求。有关更多信息,请参见如何匹配基于主机的路由在路由组件文档。欧宝官网下载app

添加动态需求与表达式

对于非常复杂的需求,您可以使用动态表达式来匹配任何请求的信息。看到如何通过条件限制路由匹配

这项工作,包括代码示例,许可下Creative Commons冲锋队3.0许可证。