路由
编辑本页警告:您正在浏览的文档欧宝官网下载appob娱乐下载Symfony 5.2,现已不再维护。
读本页的更新版本用于Syob娱乐下载mfony 6.2(当前稳定版本)。
控制器动作生成响应。路由配置定义为每个传入URL运行哪个操作。它还提供了其他有用的功能,比如生成seo友好的url(例如。/读/ intro-to-syob娱乐下载mfony
而不是index . php ?article_id = 57
).
ob娱乐下载Symfony推荐属性因为把路由和控制器放在同一个地方很方便。
5.2
使用PHP属性配置路由的功能是在Symfony 5.2中引入的。ob娱乐下载在此之前,Doctrine Annotations是使用路由配置注释控制器动作的唯一方法。
该命令还会创建以下配置文件:
1 2 3 4 5 6 7 8
#配置/线路/ annotations.yaml控制器:资源:. . / . . / src /控制器/类型:注释内核:资源:. . / . . / src / Kernel.php类型:注释
这个配置告诉Symfony在存储在ob娱乐下载src /控制器/
目录中。
类定义路由/博客
URL在您的应用程序。为此,创建一个控制器类像下面这样:
- 注释
- 属性
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16
/ / src /控制器/ BlogController.php名称空间应用程序\控制器;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用ob娱乐下载\组件\路由\注释\路线;类BlogController扩展AbstractController{/ * * *@Route("/blog", name="blog_list") */公共函数列表(){/ /……}}
这个配置定义了一个名为blog_list
属性时匹配的/博客
URL。匹配发生时,应用程序将运行列表()
方法BlogController
类。
请注意
匹配路由时不考虑URL的查询字符串。在这个例子中,url像/博客吗?foo = bar
而且/博客吗?foo = bar bar = foo
也将匹配blog_list
路线。
谨慎
如果在同一个文件中定义多个PHP类,Symfony只加载第一个类的路由,而忽略所有其他路由。ob娱乐下载
路由名称(blog_list
)现在不重要,但以后就很重要了生成的url.您只需要记住,每个路由名在应用程序中必须是唯一的。
得到,帖子
,把
等)使用方法
选项限制每个路由应响应的动词:
- 注释
- 属性
- YAML
- XML
- PHP
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
/ / src /控制器/ BlogApiController.php名称空间应用程序\控制器;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用ob娱乐下载\组件\HttpFoundation\响应;使用ob娱乐下载\组件\路由\注释\路线;类BlogApiController扩展AbstractController{/ * * *@Route("/api/posts/{id}", methods={"GET","HEAD"}) */公共函数显示(int$id):响应{/ /……返回一个JSON响应}/ * * *@Route("/api/posts/{id}", methods={"PUT"}) */公共函数编辑(int$id):响应{/ /……编辑一篇文章}}
提示
HTML表单只支持得到
而且帖子
方法。如果您正在使用与HTML表单不同的方法调用路由,请添加一个名为_method
用方法使用(例如:
).如果您使用ob娱乐下载Symfony的形式这是自动为您完成的。
条件选项,如果你需要一些路由匹配基于一些任意的匹配逻辑:
- 注释
- 属性
- YAML
- XML
- PHP
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
/ / src /控制器/ DefaultController.php名称空间应用程序\控制器;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用ob娱乐下载\组件\HttpFoundation\响应;使用ob娱乐下载\组件\路由\注释\路线;类DefaultController扩展AbstractController{/ * * *@Route(* "/contact", * name="contact", * condition="context.getMethod() in ['GET', 'HEAD'] and request.headers.get('User-Agent') matches '/firefox/i'" *) * *表达式还可以包含配置参数:allowed_browsers %”* /公共函数联系():响应{/ /……}}
的值条件
选项是任何有效的ExpressionLanguage表达式并且可以使用Symfony创建的这些变量:ob娱乐下载
-
上下文
-
的一个实例RequestContext,它包含了关于被匹配路由的最基本信息。
-
请求
-
的ob娱乐下载Symfony的请求对象,表示当前请求。
在幕后,表达式被编译为原始PHP。正因为如此,使用条件
除了底层PHP执行所需的时间之外,key不会造成额外的开销。
谨慎
条件是不 在生成url时考虑(本文后面将对此进行解释)。
ob娱乐下载Symfony推荐属性因为把路由和控制器放在同一个地方很方便。
5.2
使用PHP属性配置路由的功能是在Symfony 5.2中引入的。ob娱乐下载在此之前,Doctrine Annotations是使用路由配置注释控制器动作的唯一方法。
5.2
使用PHP属性配置路由的功能是在Symfony 5.2中引入的。ob娱乐下载在此之前,Doctrine Annotations是使用路由配置注释控制器动作的唯一方法。
该命令还会创建以下配置文件:
1 2 3 4 5 6 7 8
#配置/线路/ annotations.yaml控制器:资源:. . / . . / src /控制器/类型:注释内核:资源:. . / . . / src / Kernel.php类型:注释
这个配置告诉Symfony在存储在ob娱乐下载src /控制器/
目录中。
类定义路由/博客
URL在您的应用程序。为此,创建一个控制器类像下面这样:
- 注释
- 属性
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16
/ / src /控制器/ BlogController.php名称空间应用程序\控制器;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用ob娱乐下载\组件\路由\注释\路线;类BlogController扩展AbstractController{/ * * *@Route("/blog", name="blog_list") */公共函数列表(){/ /……}}
这个配置定义了一个名为blog_list
属性时匹配的/博客
URL。匹配发生时,应用程序将运行列表()
方法BlogController
类。
请注意
匹配路由时不考虑URL的查询字符串。在这个例子中,url像/博客吗?foo = bar
而且/博客吗?foo = bar bar = foo
也将匹配blog_list
路线。
谨慎
如果在同一个文件中定义多个PHP类,Symfony只加载第一个类的路由,而忽略所有其他路由。ob娱乐下载
路由名称(blog_list
)现在不重要,但以后就很重要了生成的url.您只需要记住,每个路由名在应用程序中必须是唯一的。
得到,帖子
,把
等)使用方法
选项限制每个路由应响应的动词:
- 注释
- 属性
- YAML
- XML
- PHP
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
/ / src /控制器/ BlogApiController.php名称空间应用程序\控制器;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用ob娱乐下载\组件\HttpFoundation\响应;使用ob娱乐下载\组件\路由\注释\路线;类BlogApiController扩展AbstractController{/ * * *@Route("/api/posts/{id}", methods={"GET","HEAD"}) */公共函数显示(int$id):响应{/ /……返回一个JSON响应}/ * * *@Route("/api/posts/{id}", methods={"PUT"}) */公共函数编辑(int$id):响应{/ /……编辑一篇文章}}
提示
HTML表单只支持得到
而且帖子
方法。如果您正在使用与HTML表单不同的方法调用路由,请添加一个名为_method
用方法使用(例如:
).如果您使用ob娱乐下载Symfony的形式这是自动为您完成的。
- 注释
- 属性
- YAML
- XML
- PHP
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
/ / src /控制器/ BlogApiController.php名称空间应用程序\控制器;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用ob娱乐下载\组件\HttpFoundation\响应;使用ob娱乐下载\组件\路由\注释\路线;类BlogApiController扩展AbstractController{/ * * *@Route("/api/posts/{id}", methods={"GET","HEAD"}) */公共函数显示(int$id):响应{/ /……返回一个JSON响应}/ * * *@Route("/api/posts/{id}", methods={"PUT"}) */公共函数编辑(int$id):响应{/ /……编辑一篇文章}}
提示
HTML表单只支持得到
而且帖子
方法。如果您正在使用与HTML表单不同的方法调用路由,请添加一个名为_method
用方法使用(例如:).如果您使用ob娱乐下载Symfony的形式这是自动为您完成的。
条件选项,如果你需要一些路由匹配基于一些任意的匹配逻辑:
- 注释
- 属性
- YAML
- XML
- PHP
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
/ / src /控制器/ DefaultController.php名称空间应用程序\控制器;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用ob娱乐下载\组件\HttpFoundation\响应;使用ob娱乐下载\组件\路由\注释\路线;类DefaultController扩展AbstractController{/ * * *@Route(* "/contact", * name="contact", * condition="context.getMethod() in ['GET', 'HEAD'] and request.headers.get('User-Agent') matches '/firefox/i'" *) * *表达式还可以包含配置参数:allowed_browsers %”* /公共函数联系():响应{/ /……}}
的值条件
选项是任何有效的ExpressionLanguage表达式并且可以使用Symfony创建的这些变量:ob娱乐下载
-
上下文
-
的一个实例RequestContext,它包含了关于被匹配路由的最基本信息。
-
请求
-
的ob娱乐下载Symfony的请求对象,表示当前请求。
在幕后,表达式被编译为原始PHP。正因为如此,使用条件
除了底层PHP执行所需的时间之外,key不会造成额外的开销。
谨慎
条件是不 在生成url时考虑(本文后面将对此进行解释)。
- 注释
- 属性
- YAML
- XML
- PHP
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
/ / src /控制器/ DefaultController.php名称空间应用程序\控制器;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用ob娱乐下载\组件\HttpFoundation\响应;使用ob娱乐下载\组件\路由\注释\路线;类DefaultController扩展AbstractController{/ * * *@Route(* "/contact", * name="contact", * condition="context.getMethod() in ['GET', 'HEAD'] and request.headers.get('User-Agent') matches '/firefox/i'" *) * *表达式还可以包含配置参数:allowed_browsers %”* /公共函数联系():响应{/ /……}}
条件
选项是任何有效的ExpressionLanguage表达式并且可以使用Symfony创建的这些变量:ob娱乐下载上下文
请求
条件
除了底层PHP执行所需的时间之外,key不会造成额外的开销。谨慎
条件是
/博客).然而,通常在定义路由时,有些部分是可变的。例如,显示一些博客文章的URL可能包括标题或段(例如:/博客/第一篇博客
或/博客/ all-about-sob娱乐下载ymfony
).
在Syob娱乐下载mfony路由中,可变部分被封装{…}
他们必须有一个唯一的名字。例如,显示博客文章内容的路由定义为/博客/{蛞蝓}
:
- 注释
- 属性
- YAML
- XML
- PHP
12 3 4 5 6 7 8 9 10 11 12 13 14 16 17 18 19 20 21 22
/ / src /控制器/ BlogController.php名称空间应用程序\控制器;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用ob娱乐下载\组件\HttpFoundation\响应;使用ob娱乐下载\组件\路由\注释\路线;类BlogController扩展AbstractController{/ /……/ * * *@Route("/blog/{slug}", name="blog_show") */公共函数显示(字符串$鼻涕虫):响应{// $slug将等于URL的动态部分//例如:at /blog/ ay-routing,那么$slug=' ay-routing'/ /……}}
变量部分的名称({蛞蝓}
(在本例中)用于创建一个PHP变量,路由内容存储在其中并传递给控制器。如果用户访问/博客/第一篇博客
URL, ob娱乐下载Symfony执行显示()
方法中的BlogController
类,并传递$slug = 'my-first-post'
的参数显示()
方法。
路由可以定义任意数量的参数,但是每个参数只能在每条路由上使用一次。/博客/关于-{类别}/页面/ {pageNumber}
).
blog_show路线(网址:/博客/{蛞蝓}
)和ablog_list
路线(网址:页面/博客/ {}
).如果路由参数接受任何值,就无法区分这两条路由。
如果用户请求/博客/第一篇博客
,两条路由将匹配,Symfony将使用先定义的路由。ob娱乐下载方法中添加一些验证即可解决此问题{页面}
参数使用需求
选择:
- 注释
- 属性
- YAML
- XML
- PHP
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
/ / src /控制器/ BlogController.php名称空间应用程序\控制器;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用ob娱乐下载\组件\HttpFoundation\响应;使用ob娱乐下载\组件\路由\注释\路线;类BlogController扩展AbstractController{/ * * *@Route(“/博客/{页面}”,name = " blog_list "需求={"页面" = " \ d + "}) * /公共函数列表(int$页面):响应{/ /……}/ * * *@Route("/blog/{slug}", name="blog_show") */公共函数显示(字符串$鼻涕虫):响应{/ /……}}
的需求
选项定义PHP正则表达式该路由参数必须匹配,才能匹配整个路由。在这个例子中,\ d +
正则表达式是否匹配数字 任何长度。现在:
URL
路线
参数
/博客/ 2
blog_list
美元的页面
=2
/博客/第一篇博客
blog_show
美元蛞蝓
=第一篇博客
提示
路由需求(以及路由路径)可以包括配置参数,这对于一次性定义复杂的正则表达式并在多个路由中重用它们非常有用。
提示
参数也支持Unicode属性,它们是匹配泛型字符类型的转义序列。例如,陆\ p {}
匹配任何语言的任何大写字符,希腊\ p {}
匹配任何希腊字符,等等。
请注意
在路由参数中使用正则表达式时,可以设置use utf8
路由选项到真正的
做任何.
字符匹配任何UTF-8字符,而不仅仅是单个字节。
如果您愿意,可以使用语法将需求内联到每个参数中{parameter_name <规定>}
.该特性使配置更加简洁,但当需求复杂时,它会降低路由的可读性:
- 注释
- 属性
- YAML
- XML
- PHP
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
/ / src /控制器/ BlogController.php名称空间应用程序\控制器;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用ob娱乐下载\组件\HttpFoundation\响应;使用ob娱乐下载\组件\路由\注释\路线;类BlogController扩展AbstractController{/ * * *@Route("/blog/{page<\d+>}", name="blog_list") */公共函数列表(int$页面):响应{/ /……}}
ob娱乐下载Symfony按照定义路由的顺序计算路由。如果一条路由的路径匹配了许多不同的模式,它可能会阻止其他路由被匹配。在YAML和XML中,您可以在配置文件中向上或向下移动路由定义来控制它们的优先级。在定义为PHP注释或属性的路由中,这要困难得多,所以您可以设置可选的优先级
参数来控制这些路由的优先级:
- 注释
- 属性
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
/ / src /控制器/ BlogController.php名称空间应用程序\控制器;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用ob娱乐下载\组件\路由\注释\路线;类BlogController扩展AbstractController{/** *该路由有一个贪婪模式,被首先定义。* *@Route("/blog/{slug}", name="blog_show") */公共函数显示(字符串$鼻涕虫){/ /……}/** *如果没有定义高于0的优先级,就无法匹配此路由。* *@Route("/blog/list", name="blog_list", priority=2) */公共函数列表(){/ /……}}
优先级参数要求为整数值。优先级高的路由排在优先级低的路由前面。未定义时的默认值为0
.
{…}
他们必须有一个唯一的名字。例如,显示博客文章内容的路由定义为/博客/{蛞蝓}
:- 注释
- 属性
- YAML
- XML
- PHP
12 3 4 5 6 7 8 9 10 11 12 13 14 16 17 18 19 20 21 22
/ / src /控制器/ BlogController.php名称空间应用程序\控制器;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用ob娱乐下载\组件\HttpFoundation\响应;使用ob娱乐下载\组件\路由\注释\路线;类BlogController扩展AbstractController{/ /……/ * * *@Route("/blog/{slug}", name="blog_show") */公共函数显示(字符串$鼻涕虫):响应{// $slug将等于URL的动态部分//例如:at /blog/ ay-routing,那么$slug=' ay-routing'/ /……}}
{蛞蝓}
(在本例中)用于创建一个PHP变量,路由内容存储在其中并传递给控制器。如果用户访问/博客/第一篇博客
URL, ob娱乐下载Symfony执行显示()
方法中的BlogController
类,并传递$slug = 'my-first-post'
的参数显示()
方法。/博客/关于-{类别}/页面/ {pageNumber}
).blog_show路线(网址:/博客/{蛞蝓}
)和ablog_list
路线(网址:页面/博客/ {}
).如果路由参数接受任何值,就无法区分这两条路由。
如果用户请求/博客/第一篇博客
,两条路由将匹配,Symfony将使用先定义的路由。ob娱乐下载方法中添加一些验证即可解决此问题{页面}
参数使用需求
选择:
- 注释
- 属性
- YAML
- XML
- PHP
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
/ / src /控制器/ BlogController.php名称空间应用程序\控制器;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用ob娱乐下载\组件\HttpFoundation\响应;使用ob娱乐下载\组件\路由\注释\路线;类BlogController扩展AbstractController{/ * * *@Route(“/博客/{页面}”,name = " blog_list "需求={"页面" = " \ d + "}) * /公共函数列表(int$页面):响应{/ /……}/ * * *@Route("/blog/{slug}", name="blog_show") */公共函数显示(字符串$鼻涕虫):响应{/ /……}}
的需求
选项定义PHP正则表达式该路由参数必须匹配,才能匹配整个路由。在这个例子中,\ d +
正则表达式是否匹配数字 任何长度。现在:
URL
路线
参数
/博客/ 2
blog_list
美元的页面
=2
/博客/第一篇博客
blog_show
美元蛞蝓
=第一篇博客
提示
路由需求(以及路由路径)可以包括配置参数,这对于一次性定义复杂的正则表达式并在多个路由中重用它们非常有用。
提示
参数也支持Unicode属性,它们是匹配泛型字符类型的转义序列。例如,陆\ p {}
匹配任何语言的任何大写字符,希腊\ p {}
匹配任何希腊字符,等等。
请注意
在路由参数中使用正则表达式时,可以设置use utf8
路由选项到真正的
做任何.
字符匹配任何UTF-8字符,而不仅仅是单个字节。
如果您愿意,可以使用语法将需求内联到每个参数中{parameter_name <规定>}
.该特性使配置更加简洁,但当需求复杂时,它会降低路由的可读性:
- 注释
- 属性
- YAML
- XML
- PHP
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
/ / src /控制器/ BlogController.php名称空间应用程序\控制器;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用ob娱乐下载\组件\HttpFoundation\响应;使用ob娱乐下载\组件\路由\注释\路线;类BlogController扩展AbstractController{/ * * *@Route("/blog/{page<\d+>}", name="blog_list") */公共函数列表(int$页面):响应{/ /……}}
/博客/第一篇博客
,两条路由将匹配,Symfony将使用先定义的路由。ob娱乐下载方法中添加一些验证即可解决此问题{页面}
参数使用需求
选择:- 注释
- 属性
- YAML
- XML
- PHP
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
/ / src /控制器/ BlogController.php名称空间应用程序\控制器;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用ob娱乐下载\组件\HttpFoundation\响应;使用ob娱乐下载\组件\路由\注释\路线;类BlogController扩展AbstractController{/ * * *@Route(“/博客/{页面}”,name = " blog_list "需求={"页面" = " \ d + "}) * /公共函数列表(int$页面):响应{/ /……}/ * * *@Route("/blog/{slug}", name="blog_show") */公共函数显示(字符串$鼻涕虫):响应{/ /……}}
需求
选项定义PHP正则表达式该路由参数必须匹配,才能匹配整个路由。在这个例子中,\ d +
正则表达式是否匹配URL | 路线 | 参数 |
---|---|---|
/博客/ 2 |
blog_list |
美元的页面 =2 |
/博客/第一篇博客 |
blog_show |
美元蛞蝓 =第一篇博客 |
提示
路由需求(以及路由路径)可以包括配置参数,这对于一次性定义复杂的正则表达式并在多个路由中重用它们非常有用。
提示
参数也支持Unicode属性,它们是匹配泛型字符类型的转义序列。例如,陆\ p {}
匹配任何语言的任何大写字符,希腊\ p {}
匹配任何希腊字符,等等。
请注意
在路由参数中使用正则表达式时,可以设置use utf8
路由选项到真正的
做任何.
字符匹配任何UTF-8字符,而不仅仅是单个字节。
{parameter_name <规定>}
.该特性使配置更加简洁,但当需求复杂时,它会降低路由的可读性:- 注释
- 属性
- YAML
- XML
- PHP
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
/ / src /控制器/ BlogController.php名称空间应用程序\控制器;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用ob娱乐下载\组件\HttpFoundation\响应;使用ob娱乐下载\组件\路由\注释\路线;类BlogController扩展AbstractController{/ * * *@Route("/blog/{page<\d+>}", name="blog_list") */公共函数列表(int$页面):响应{/ /……}}
优先级
参数来控制这些路由的优先级:- 注释
- 属性
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
/ / src /控制器/ BlogController.php名称空间应用程序\控制器;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用ob娱乐下载\组件\路由\注释\路线;类BlogController扩展AbstractController{/** *该路由有一个贪婪模式,被首先定义。* *@Route("/blog/{slug}", name="blog_show") */公共函数显示(字符串$鼻涕虫){/ /……}/** *如果没有定义高于0的优先级,就无法匹配此路由。* *@Route("/blog/list", name="blog_list", priority=2) */公共函数列表(){/ /……}}
0
.现在,保持前面的路由配置,但是改变控制器动作的参数。而不是字符串$蛞蝓
,添加BlogPost美元后
:
12 3 4 5 6 7 8 9 10 11 12 13 14 16 17 18 19 20 21 22
/ / src /控制器/ BlogController.php名称空间应用程序\控制器;使用应用程序\实体\博客;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用ob娱乐下载\组件\HttpFoundation\响应;使用ob娱乐下载\组件\路由\注释\路线;类BlogController扩展AbstractController{/ /……/ * * *@Route("/blog/{slug}", name="blog_show") */公共函数显示(博客$帖子):响应{// $post是slug匹配路由参数的对象/ /……}}
如果你的控制器参数包含对象的类型提示(博客
在这种情况下),“参数转换器”发出一个数据库请求,使用请求参数(鼻涕虫
在这种情况下)。如果没有找到对象,Symfony将自动生成40ob娱乐下载4响应。
读了完整的参数转换器文档欧宝官网下载app了解Symfony提供的转换器以及如何配置它们。ob娱乐下载
_controller
该参数用于确定路由匹配时执行哪个控制器和动作。
-
_format
-
的“请求格式”
请求
对象。这用于设置内容类型
的响应(例如ajson
格式转换为内容类型
的application / json
).
-
_fragment
-
用于设置片段标识符,该标识符是以。开头的URL的可选最后一部分
#
字符,用于标识文档的一部分。
-
_locale
-
用于设置语言环境根据要求。
您可以包含这些属性(除了_fragment
)在单个路由和路由导入中。ob娱乐下载Symfony定义了一些具有相同名称的特殊属性(除了前面的下划线),因此您可以更容易地定义它们:
- 注释
- 属性
- YAML
- XML
- PHP
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
/ / src /控制器/ ArticleController.php名称空间应用程序\控制器;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用ob娱乐下载\组件\HttpFoundation\响应;使用ob娱乐下载\组件\路由\注释\路线;类ArticleController扩展AbstractController{/ * * *@Route(* "/articles/{_locale}/搜索。{_format}",* locale="en", * format="html", * requirements={ * "_locale": "en|fr", * "_format": "html|xml", * } * ) */公共函数搜索():响应{}}
_format
请求
对象。这用于设置内容类型
的响应(例如ajson
格式转换为内容类型
的application / json
)._fragment
#
字符,用于标识文档的一部分。_locale
_fragment
)在单个路由和路由导入中。ob娱乐下载Symfony定义了一些具有相同名称的特殊属性(除了前面的下划线),因此您可以更容易地定义它们:- 注释
- 属性
- YAML
- XML
- PHP
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
/ / src /控制器/ ArticleController.php名称空间应用程序\控制器;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用ob娱乐下载\组件\HttpFoundation\响应;使用ob娱乐下载\组件\路由\注释\路线;类ArticleController扩展AbstractController{/ * * *@Route(* "/articles/{_locale}/搜索。{_format}",* locale="en", * format="html", * requirements={ * "_locale": "en|fr", * "_format": "html|xml", * } * ) */公共函数搜索():响应{}}
/博客这就是为什么Symfonyob娱乐下载包含了共享路由配置的功能。
将路由定义为属性或注释时,将公共配置放在#(路线)
属性(或@Route
控制器类的注释)。在其他路由格式中,在引入路由时使用选项定义公共配置。
- 注释
- 属性
- YAML
- XML
- PHP
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
/ / src /控制器/ BlogController.php名称空间应用程序\控制器;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用ob娱乐下载\组件\HttpFoundation\响应;使用ob娱乐下载\组件\路由\注释\路线;/ * * *@Route(" /博客”,要求={“_locale”:“en | es | fr”},name = " blog_ ") * /类BlogController扩展AbstractController{/ * * *@Route("/{_locale}", name="index") */公共函数指数():响应{/ /……}/ * * *@Route("/{_locale}/posts/{slug}", name="show") */公共函数显示(文章$帖子):响应{/ /……}}
的路由index ()
Action将被调用blog_index
它的URL将是/博客/ {_locale}
.的路线显示()
Action将被调用blog_show
它的URL将是/博客/ {_locale} /文章/{蛞蝓}
.这两个路由还将验证_locale
参数匹配类注释中定义的正则表达式。
另请参阅
ob娱乐下载Symfony可以从不同的源导入路由你甚至可以创建自己的路由加载器。
#(路线)
属性(或@Route
控制器类的注释)。在其他路由格式中,在引入路由时使用选项定义公共配置。- 注释
- 属性
- YAML
- XML
- PHP
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
/ / src /控制器/ BlogController.php名称空间应用程序\控制器;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用ob娱乐下载\组件\HttpFoundation\响应;使用ob娱乐下载\组件\路由\注释\路线;/ * * *@Route(" /博客”,要求={“_locale”:“en | es | fr”},name = " blog_ ") * /类BlogController扩展AbstractController{/ * * *@Route("/{_locale}", name="index") */公共函数指数():响应{/ /……}/ * * *@Route("/{_locale}/posts/{slug}", name="show") */公共函数显示(文章$帖子):响应{/ /……}}
index ()
Action将被调用blog_index
它的URL将是/博客/ {_locale}
.的路线显示()
Action将被调用blog_show
它的URL将是/博客/ {_locale} /文章/{蛞蝓}
.这两个路由还将验证_locale
参数匹配类注释中定义的正则表达式。另请参阅
ob娱乐下载Symfony可以从不同的源导入路由你甚至可以创建自己的路由加载器。
请求对象在“请求属性”中存储了所有路由配ob娱乐下载置(如名称和参数)。控件可以在控制器中获取此信息请求
对象:
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
/ / src /控制器/ BlogController.php名称空间应用程序\控制器;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用ob娱乐下载\组件\HttpFoundation\请求;使用ob娱乐下载\组件\HttpFoundation\响应;使用ob娱乐下载\组件\路由\注释\路线;类BlogController扩展AbstractController{/ * * *@Route("/blog", name="blog_list") */公共函数列表(请求$请求):响应{$routeName=$请求->属性->get (“_route”);$routeParameters=$请求->属性->get (“_route_params”);//获取所有可用的属性(不仅仅是路由属性):$allAttributes=$请求->属性->所有();/ /……}}
您也可以在服务中获得此信息request_stack
服务获取服务中的Request对象.在模板中,使用枝全局应用程序变量获取请求及其属性:
1 2 3 4 5
{%集Route_name = app.request. properties .get('_route') %}{%集Route_parameters = app.request.attributes.get('_route_params') %}{#使用此命令获取所有可用属性(不仅仅是路由属性)#}{%集All_attributes = app.request.attributes.all %}
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
/ / src /控制器/ BlogController.php名称空间应用程序\控制器;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用ob娱乐下载\组件\HttpFoundation\请求;使用ob娱乐下载\组件\HttpFoundation\响应;使用ob娱乐下载\组件\路由\注释\路线;类BlogController扩展AbstractController{/ * * *@Route("/blog", name="blog_list") */公共函数列表(请求$请求):响应{$routeName=$请求->属性->get (“_route”);$routeParameters=$请求->属性->get (“_route_params”);//获取所有可用的属性(不仅仅是路由属性):$allAttributes=$请求->属性->所有();/ /……}}
request_stack
服务获取服务中的Request对象.在模板中,使用枝全局应用程序变量获取请求及其属性:1 2 3 4 5
{%集Route_name = app.request. properties .get('_route') %}{%集Route_parameters = app.request.attributes.get('_route_params') %}{#使用此命令获取所有可用属性(不仅仅是路由属性)#}{%集All_attributes = app.request.attributes.all %}
RedirectController重定向到其他路由和url:
- YAML
- XML
- PHP
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
#配置/ routes.yamldoc_shortcut:路径:/医生控制器:ob娱乐下载Symfony \包\ FrameworkBundle \ \ RedirectController控制器默认值:路线:“doc_page”#可选地,您可以定义一些参数传递给路由页面:“指数”版本:“当前”#重定向在默认情况下是临时的(代码302),但你可以将它们设置为永久的(代码301)永久的:真正的在重定向时保留原始的查询字符串参数keepQueryParams:真正的在重定向时保留HTTP方法。重定向状态改变对于临时重定向,它使用307状态码而不是302对于永久重定向,它使用308状态码而不是301keepRequestMethod:真正的legacy_doc:路径:/遗留/医生控制器:ob娱乐下载Symfony \包\ FrameworkBundle \ \ RedirectController控制器默认值:#该值可以是一个绝对路径或绝对URL路径:“https://legacy.example.com/doc”永久的:真正的
提示
ob娱乐下载Symfony还提供了一些实用程序重定向内部控制器
- YAML
- XML
- PHP
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
#配置/ routes.yamldoc_shortcut:路径:/医生控制器:ob娱乐下载Symfony \包\ FrameworkBundle \ \ RedirectController控制器默认值:路线:“doc_page”#可选地,您可以定义一些参数传递给路由页面:“指数”版本:“当前”#重定向在默认情况下是临时的(代码302),但你可以将它们设置为永久的(代码301)永久的:真正的在重定向时保留原始的查询字符串参数keepQueryParams:真正的在重定向时保留HTTP方法。重定向状态改变对于临时重定向,它使用307状态码而不是302对于永久重定向,它使用308状态码而不是301keepRequestMethod:真正的legacy_doc:路径:/遗留/医生控制器:ob娱乐下载Symfony \包\ FrameworkBundle \ \ RedirectController控制器默认值:#该值可以是一个绝对路径或绝对URL路径:“https://legacy.example.com/doc”永久的:真正的
提示
ob娱乐下载Symfony还提供了一些实用程序重定向内部控制器
宿主选项,要求传入请求的HTTP主机与某个特定值匹配。在下面的例子中,两条路由匹配相同的路径(/
),但其中一个只响应特定的主机名:
- 注释
- 属性
- YAML
- XML
- PHP
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
/ / src /控制器/ MainController.php名称空间应用程序\控制器;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用ob娱乐下载\组件\HttpFoundation\响应;使用ob娱乐下载\组件\路由\注释\路线;类MainController扩展AbstractController{/ * * *@Route(" name =“mobile_homepage”,主机= " m.example.com ") * /公共函数mobileHomepage():响应{/ /……}/ * * *@Route("/", name="首页")*/公共函数主页():响应{/ /……}}
的值宿主
选项可以包含参数(这在多租户应用程序中很有用),也可以使用需求
:
- 注释
- 属性
- YAML
- XML
- PHP
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
/ / src /控制器/ MainController.php名称空间应用程序\控制器;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用ob娱乐下载\组件\HttpFoundation\响应;使用ob娱乐下载\组件\路由\注释\路线;类MainController扩展AbstractController{/ * * *@Route( * "/", * name = " mobile_homepage ", *主机= "{子域名}.example.com”,*缺省值={“子域名”=“m”},*需求={“子域名”=“m |移动”}*)* /公共函数mobileHomepage():响应{/ /……}/ * * *@Route("/", name="首页")*/公共函数主页():响应{/ /……}}
在上面的例子中,子域名
参数定义了一个默认值,否则每次使用这些路由生成URL时都需要包含一个子域值。
提示
您还可以设置宿主
选择的时候进口航线使它们都需要该主机名。
请注意
使用子域路由时,必须设置宿主
HTTP报头功能测试或者路径不匹配:
1 2 3 4 5 6 7 8 9
$履带=$客户端->请求(“得到”,' / ', [], [], [“HTTP_HOST”= >“m.example.com”]//或者从一些配置参数中获取值:/ / [' HTTP_HOST ' = > ' m。”。客户端- > getContainer()——> getParameter(域)]);
提示
中也可以使用内联默认值和需求格式宿主
选择:{子域名m |移动> < ? m} .example.com
5.2
在Symfony 5.2中引入了主机中的内联参数默认值支持。ob娱乐下载在Symfony ob娱乐下载5.2之前,仅在路径中支持它们。
- 注释
- 属性
- YAML
- XML
- PHP
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
/ / src /控制器/ MainController.php名称空间应用程序\控制器;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用ob娱乐下载\组件\HttpFoundation\响应;使用ob娱乐下载\组件\路由\注释\路线;类MainController扩展AbstractController{/ * * *@Route(" name =“mobile_homepage”,主机= " m.example.com ") * /公共函数mobileHomepage():响应{/ /……}/ * * *@Route("/", name="首页")*/公共函数主页():响应{/ /……}}
宿主
选项可以包含参数(这在多租户应用程序中很有用),也可以使用需求
:- 注释
- 属性
- YAML
- XML
- PHP
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
/ / src /控制器/ MainController.php名称空间应用程序\控制器;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用ob娱乐下载\组件\HttpFoundation\响应;使用ob娱乐下载\组件\路由\注释\路线;类MainController扩展AbstractController{/ * * *@Route( * "/", * name = " mobile_homepage ", *主机= "{子域名}.example.com”,*缺省值={“子域名”=“m”},*需求={“子域名”=“m |移动”}*)* /公共函数mobileHomepage():响应{/ /……}/ * * *@Route("/", name="首页")*/公共函数主页():响应{/ /……}}
子域名
参数定义了一个默认值,否则每次使用这些路由生成URL时都需要包含一个子域值。提示
您还可以设置宿主
选择的时候进口航线使它们都需要该主机名。
请注意
使用子域路由时,必须设置宿主
HTTP报头功能测试或者路径不匹配:
1 2 3 4 5 6 7 8 9
$履带=$客户端->请求(“得到”,' / ', [], [], [“HTTP_HOST”= >“m.example.com”]//或者从一些配置参数中获取值:/ / [' HTTP_HOST ' = > ' m。”。客户端- > getContainer()——> getParameter(域)]);
提示
中也可以使用内联默认值和需求格式宿主
选择:{子域名m |移动> < ? m} .example.com
5.2
在Symfony 5.2中引入了主机中的内联参数默认值支持。ob娱乐下载在Symfony ob娱乐下载5.2之前,仅在路径中支持它们。
翻译语言环境.这样就避免了重复路由的需要,这也减少了潜在的错误:
- 注释
- 属性
- YAML
- XML
- PHP
12 3 4 5 6 7 8 9 10 11 12 13 14 16 17 18 19 20
/ / src /控制器/ CompanyController.php名称空间应用程序\控制器;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用ob娱乐下载\组件\HttpFoundation\响应;使用ob娱乐下载\组件\路由\注释\路线;类CompanyController扩展AbstractController{/ * * *@Route({*“en”:“/关于我们”*“问”:“/ over-ons”*},name = " about_us ") * /公共函数关于():响应{/ /……}}
请注意
在为本地化路由使用PHP属性时,必须使用路径
指定路径数组的命名参数。
- 注释
- 属性
- YAML
- XML
- PHP
12 3 4 5 6 7 8 9 10 11 12 13 14 16 17 18 19 20
/ / src /控制器/ CompanyController.php名称空间应用程序\控制器;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用ob娱乐下载\组件\HttpFoundation\响应;使用ob娱乐下载\组件\路由\注释\路线;类CompanyController扩展AbstractController{/ * * *@Route({*“en”:“/关于我们”*“问”:“/ over-ons”*},name = " about_us ") * /公共函数关于():响应{/ /……}}
请注意
在为本地化路由使用PHP属性时,必须使用路径
指定路径数组的命名参数。
当匹配到本地化路由时,Symfony在整个请求过程中自动使用相同的区域ob娱乐下载设置。
提示
当应用程序使用完整的“语言+区域”区域设置时(例如:fr_FR
,fr_BE
),如果所有相关区域的url都是相同的,路由只能使用语言部分(例如:fr
),以避免重复使用相同网址。
国际化应用程序的一个常见需求是为所有路由加上区域设置前缀。这可以通过为每个语言环境定义一个不同的前缀来实现(如果你喜欢,可以为默认语言环境设置一个空前缀):
- YAML
- XML
- PHP
1 2 3 4 5 6 7
#配置/线路/ annotations.yaml控制器:资源:“. . / . . / src /控制器/”类型:注释前缀:en:”#不要为url加上英文前缀,默认的语言环境问:' /问'
另一个常见的要求是根据语言环境在不同的域上托管网站。这可以通过为每个地区定义不同的主机来实现。
5.1
在Symfony 5.1中引入了定义主机数组的功能。ob娱乐下载
- YAML
- XML
- PHP
1 2 3 4 5 6 7
#配置/线路/ annotations.yaml控制器:资源:“. . / . . / src /控制器/”类型:注释主持人:en:“https://www.example.com”问:“https://www.example.nl”
有时,当需要缓存HTTP响应时,确保能够缓存是很重要的。但是,无论何时在请求期间启动会话,Symfony都会将响应转换为私有的不可缓存响应。ob娱乐下载
详细信息请参见HTTP缓存.
路由可以配置无状态的
布尔选项,以声明会话不应该在匹配请求时使用:
- 注释
- 属性
- YAML
- XML
- PHP
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16
/ / src /控制器/ MainController.php名称空间应用程序\控制器;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用ob娱乐下载\组件\路由\注释\路线;类MainController扩展AbstractController{/ * * *@Route("/", name="首页",stateless=true) */公共函数主页(){/ /……}}
现在,如果使用了会话,应用程序将根据您的kernel.debug
参数:启用
:将抛出一个UnexpectedSessionUsageException异常禁用
:将记录一个警告
它将帮助您理解并有望修复应用程序中的意外行为。