路由
编辑本页警告:您正在浏览的文档欧宝官网下载appob娱乐下载Symfony 4.3,现已不再维护。
读本页的更新版本用于Syob娱乐下载mfony 6.2(当前稳定版本)。
控制器动作生成响应。路由配置定义为每个传入URL运行哪个操作。它还提供了其他有用的功能,比如生成seo友好的url(例如。/读/ intro-to-syob娱乐下载mfony
而不是index . php ?article_id = 57
).
ob娱乐下载Symfony推荐注释因为把路由和控制器放在同一个地方很方便。
除了安装所需的依赖项外,该命令还创建以下配置文件:
1 2 3 4
#配置/ routes.yaml控制器:资源:“. . / src /控制器/”类型:注释
这个配置告诉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
路线。
路由名称(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
/ / src /控制器/ BlogApiController.php名称空间应用程序\控制器;/ /……类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
/ / src /控制器/ DefaultController.php名称空间应用程序\控制器;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用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推荐注释因为把路由和控制器放在同一个地方很方便。
除了安装所需的依赖项外,该命令还创建以下配置文件:
1 2 3 4
#配置/ routes.yaml控制器:资源:“. . / src /控制器/”类型:注释
这个配置告诉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
路线。
路由名称(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
/ / src /控制器/ BlogApiController.php名称空间应用程序\控制器;/ /……类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
/ / src /控制器/ BlogApiController.php名称空间应用程序\控制器;/ /……类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
/ / src /控制器/ DefaultController.php名称空间应用程序\控制器;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用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
/ / src /控制器/ DefaultController.php名称空间应用程序\控制器;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用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
/ / src /控制器/ BlogController.php名称空间应用程序\控制器;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用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
/ / src /控制器/ BlogController.php名称空间应用程序\控制器;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用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
/ / src /控制器/ BlogController.php名称空间应用程序\控制器;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用ob娱乐下载\组件\路由\注释\路线;类BlogController扩展AbstractController{/ * * *@Route("/blog/{page<\d+>}", name="blog_list") */公共函数列表(int$页面){/ /……}}
现在,保持前面的路由配置,但是改变控制器动作的参数。而不是字符串$蛞蝓
,添加BlogPost美元后
:
12 3 4 5 6 7 8 9 10 11 12 13 14 16 17 18 19 20 21
/ / src /控制器/ BlogController.php名称空间应用程序\控制器;使用应用程序\实体\博客;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用ob娱乐下载\组件\路由\注释\路线;类BlogController扩展AbstractController{/ /……/ * * *@Route("/blog/{slug}", name="blog_show") */公共函数显示(博客$帖子){// $post是slug匹配路由参数的对象/ /……}}
如果你的控制器参数包含对象的类型提示(博客
在这种情况下),“参数转换器”发出一个数据库请求,使用请求参数(鼻涕虫
在这种情况下)。如果没有找到对象,Symfony将自动生成40ob娱乐下载4响应。
读了完整的参数转换器文档欧宝官网下载app了解Symfony提供的转换器以及如何配置它们。ob娱乐下载
{…}
他们必须有一个唯一的名字。例如,显示博客文章内容的路由定义为/博客/{蛞蝓}
:- 注释
- YAML
- XML
- PHP
12 3 4 5 6 7 8 9 10 11 12 13 14 16 17 18 19 20 21
/ / src /控制器/ BlogController.php名称空间应用程序\控制器;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用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
/ / src /控制器/ BlogController.php名称空间应用程序\控制器;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用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
/ / src /控制器/ BlogController.php名称空间应用程序\控制器;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用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
/ / src /控制器/ BlogController.php名称空间应用程序\控制器;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用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
/ / src /控制器/ BlogController.php名称空间应用程序\控制器;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用ob娱乐下载\组件\路由\注释\路线;类BlogController扩展AbstractController{/ * * *@Route("/blog/{page<\d+>}", name="blog_list") */公共函数列表(int$页面){/ /……}}
字符串$蛞蝓
,添加BlogPost美元后
:12 3 4 5 6 7 8 9 10 11 12 13 14 16 17 18 19 20 21
/ / src /控制器/ BlogController.php名称空间应用程序\控制器;使用应用程序\实体\博客;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用ob娱乐下载\组件\路由\注释\路线;类BlogController扩展AbstractController{/ /……/ * * *@Route("/blog/{slug}", name="blog_show") */公共函数显示(博客$帖子){// $post是slug匹配路由参数的对象/ /……}}
博客
在这种情况下),“参数转换器”发出一个数据库请求,使用请求参数(鼻涕虫
在这种情况下)。如果没有找到对象,Symfony将自动生成40ob娱乐下载4响应。_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 16 17 18 19 20 21
/ / src /控制器/ ArticleController.php名称空间应用程序\控制器;/ /……类ArticleController扩展AbstractController{/ * * *@Route(* "/articles/{_locale}/搜索。{_format}",* locale="en", * format="html", * requirements={ * "_locale": "en|fr", * "_format": "html|xml", * } * ) */公共函数搜索(){}}
4.3
这些特殊属性是在Symfony 4.3中引入的。ob娱乐下载
_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 16 17 18 19 20 21
/ / src /控制器/ ArticleController.php名称空间应用程序\控制器;/ /……类ArticleController扩展AbstractController{/ * * *@Route(* "/articles/{_locale}/搜索。{_format}",* locale="en", * format="html", * requirements={ * "_locale": "en|fr", * "_format": "html|xml", * } * ) */公共函数搜索(){}}
4.3
这些特殊属性是在Symfony 4.3中引入的。ob娱乐下载
/博客这就是为什么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
/ / src /控制器/ BlogController.php名称空间应用程序\控制器;使用ob娱乐下载\组件\路由\注释\路线;/ * * *@Route(" /博客”,要求={“_locale”:“en | es | fr”},name = " blog_ ") * /类BlogController{/ * * *@Route("/{_locale}", name="index") */公共函数指数(){/ /……}/ * * *@Route("/{_locale}/posts/{slug}", name="show") */公共函数显示(文章$帖子){/ /……}}
的路由index ()
Action将被调用blog_index
它的URL将是/博客/
.的路线显示()
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
/ / src /控制器/ BlogController.php名称空间应用程序\控制器;使用ob娱乐下载\组件\路由\注释\路线;/ * * *@Route(" /博客”,要求={“_locale”:“en | es | fr”},name = " blog_ ") * /类BlogController{/ * * *@Route("/{_locale}", name="index") */公共函数指数(){/ /……}/ * * *@Route("/{_locale}/posts/{slug}", name="show") */公共函数显示(文章$帖子){/ /……}}
index ()
Action将被调用blog_index
它的URL将是/博客/
.的路线显示()
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
/ / src /控制器/ BlogController.php名称空间应用程序\控制器;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用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
/ / src /控制器/ BlogController.php名称空间应用程序\控制器;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用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重定向到其他路线(redirectAction
)和网址(urlRedirectAction
):
- 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:: redirectAction默认值:路线:“doc_page”#可选地,您可以定义一些参数传递给路由页面:“指数”版本:“当前”#重定向在默认情况下是临时的(代码302),但你可以将它们设置为永久的(代码301)永久的:真正的在重定向时保留原始的查询字符串参数keepQueryParams:真正的在重定向时保留HTTP方法。重定向状态改变对于临时重定向,它使用307状态码而不是302对于永久重定向,它使用308状态码而不是301keepRequestMethod:真正的legacy_doc:路径:/遗留/医生控制器:ob娱乐下载Symfony控制器\包\ FrameworkBundle \ \ RedirectController:: urlRedirectAction默认值:#该值可以是一个绝对路径或绝对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:: redirectAction默认值:路线:“doc_page”#可选地,您可以定义一些参数传递给路由页面:“指数”版本:“当前”#重定向在默认情况下是临时的(代码302),但你可以将它们设置为永久的(代码301)永久的:真正的在重定向时保留原始的查询字符串参数keepQueryParams:真正的在重定向时保留HTTP方法。重定向状态改变对于临时重定向,它使用307状态码而不是302对于永久重定向,它使用308状态码而不是301keepRequestMethod:真正的legacy_doc:路径:/遗留/医生控制器:ob娱乐下载Symfony控制器\包\ FrameworkBundle \ \ RedirectController:: urlRedirectAction默认值:#该值可以是一个绝对路径或绝对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
/ / src /控制器/ MainController.php名称空间应用程序\控制器;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用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
/ / src /控制器/ MainController.php名称空间应用程序\控制器;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用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(域)]);
- 注释
- 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 /控制器/ MainController.php名称空间应用程序\控制器;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用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
/ / src /控制器/ MainController.php名称空间应用程序\控制器;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用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(域)]);
翻译语言环境.这样就避免了重复路由的需要,这也减少了潜在的错误:
- 注释
- YAML
- XML
- PHP
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
/ / src /控制器/ CompanyController.php名称空间应用程序\控制器;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用ob娱乐下载\组件\路由\注释\路线;类CompanyController扩展AbstractController{/ * * *@Route({*“en”:“/关于我们”*“问”:“/ over-ons”*},name = " about_us ") * /公共函数关于(){/ /……}}
- 注释
- YAML
- XML
- PHP
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
/ / src /控制器/ CompanyController.php名称空间应用程序\控制器;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用ob娱乐下载\组件\路由\注释\路线;类CompanyController扩展AbstractController{/ * * *@Route({*“en”:“/关于我们”*“问”:“/ over-ons”*},name = " about_us ") * /公共函数关于(){/ /……}}
当匹配到本地化路由时,Symfony在整个请求过程中自动使用相同的区域ob娱乐下载设置。
提示
当应用程序使用完整的“语言+区域”区域设置时(例如:fr_FR
,fr_BE
),如果所有相关区域的url都是相同的,路由只能使用语言部分(例如:fr
),以避免重复使用相同网址。
国际化应用程序的一个常见需求是为所有路由加上区域设置前缀。这可以通过为每个语言环境定义一个不同的前缀来实现(如果你喜欢,可以为默认语言环境设置一个空前缀):
- YAML
- XML
- PHP
1 2 3 4 5 6 7
#配置/线路/ annotations.yaml控制器:资源:“. . / src /控制器/”类型:注释前缀:en:”#不要为url加上英文前缀,默认的语言环境问:' /问'
< a href = "…" >值手动添加到HTML模板中。另外,如果某些路由的URL发生变化,只需更新路由配置,所有链接都会更新。
要生成URL,您需要指定路由的名称(例如:blog_show
)和路由所定义的参数的值(例如:Slug = my blog-post
).
因此,每个路由都有一个内部名称,在应用程序中必须是唯一的。方法显式设置路由名的名字
选项,Symfoob娱乐下载ny会根据控制器和动作自动生成一个名称。
AbstractController,使用generateUrl ()
助手:
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 32 33
/ / src /控制器/ BlogController.php名称空间应用程序\控制器;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用ob娱乐下载\组件\路由\注释\路线;使用ob娱乐下载\组件\路由\发电机\UrlGeneratorInterface;类BlogController扩展AbstractController{/ * * *@Route("/blog", name="blog_list") */公共函数列表(){/ /……//生成不带路由参数的URL$signUpPage=$这->generateUrl (“sign_up”);//生成带有路由参数的URL$userProfilePage=$这->generateUrl (“user_profile”, (“用户名”= >$用户->getUsername ()));//生成的url默认为“绝对路径”。传递第三个可选的//参数来生成不同的URL(例如,一个“绝对URL”)$signUpPage=$这->generateUrl (“sign_up”, [], UrlGeneratorInterface::ABSOLUTE_URL);//当路由被本地化时,Symfony默认使用当前请求地区ob娱乐下载//如果你想显式地设置locale,传递一个不同的'_locale'值$signUpPageInDutch=$这->generateUrl (“sign_up”, (“_locale”= >“问”]);}}
请注意
如果你通过generateUrl ()
方法一些不属于路由定义的参数,它们作为查询字符串包含在生成的URL中:
1 2 3
$这->generateUrl (“博客”, (“页面”= >2,“类别”= >Sob娱乐下载ymfony的]);// 'blog'路由只定义'page'参数;生成的URL为:/ / /博客/ 2 ?类别= Symfoob娱乐下载ny
如果您的控制器没有从AbstractController
,你需要在控制器中获取服务并按照下一节的说明进行操作。
路由器ob娱乐下载Symfony服务变成您自己的服务并使用它生成()
方法。当使用服务自动装配只需要在服务构造函数中添加参数,并使用UrlGeneratorInterface类:
12 34 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 32 33 34 35
/ / src /服务/ SomeService.php名称空间应用程序\服务;使用ob娱乐下载\组件\路由\发电机\UrlGeneratorInterface;类SomeService{私人$路由器;公共函数__construct(UrlGeneratorInterface$路由器){$这->路由器=$路由器;}公共函数someMethod(){/ /……//生成不带路由参数的URL$signUpPage=$这->路由器->生成(“sign_up”);//生成带有路由参数的URL$userProfilePage=$这->路由器->生成(“user_profile”, (“用户名”= >$用户->getUsername ()));//生成的url默认为“绝对路径”。传递第三个可选的//参数来生成不同的URL(例如,一个“绝对URL”)$signUpPage=$这->路由器->生成(“sign_up”, [], UrlGeneratorInterface::ABSOLUTE_URL);//当路由被本地化时,Symfony默认使用当前请求地区ob娱乐下载//如果你想显式地设置locale,传递一个不同的'_locale'值$signUpPageInDutch=$这->路由器->生成(“sign_up”, (“_locale”= >“问”]);}}
在页面之间创建链接在关于Symfony模板的主要文章中。ob娱乐下载
路径()而且url ()
Twig函数生成url并将它们存储在JavaScript变量中。的escape ()
函数需要转义任何非javascript安全的值:
1 2 3
<脚本>常量路线="{{path('blog_show', {slug: 'my-blog-post'})|逃避(js)}}";脚本>
如果需要动态生成url,或者使用纯JavaScript代码,则此解决方案不起作用。在这些情况下,考虑使用FOSJsRoutingBundle.
在服务中生成url.唯一的区别是,命令不是在HTTP上下文中执行的,因此它们不能访问HTTP请求。在实践中,这意味着如果您生成绝对url,您将得到http://localhost/
作为主机名,而不是您的真实主机名。
解决方案是配置命令在生成url时使用的“请求上下文”。该上下文可以为所有命令全局配置:
- YAML
- XML
- PHP
1 2 3 4 5
#配置/ services.yaml参数:router.request_context.host:“example.org”router.request_context.base_url:“我的/路径”asset.request_context.base_path:“% router.request_context.base_url %”
该信息也可以配置每个命令:
12 34 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 32 33 34 35 36 37 38 39 40 41 42 43 44
/ / src /命令/ SomeCommand.php名称空间应用程序\命令;使用ob娱乐下载\组件\路由\发电机\UrlGeneratorInterface;使用ob娱乐下载\组件\路由\RouterInterface;/ /……类SomeCommand扩展命令{私人$路由器;公共函数__construct(RouterInterface$路由器){父::__construct ();$这->路由器=$路由器;}受保护的函数执行(InputInterface$输入, OutputInterface$输出){//这些值覆盖任何全局配置$上下文=$这->路由器->getContext ();$上下文->setHost (“example.com”);$上下文->setBaseUrl (“我的/路径”);//生成不带路由参数的URL$signUpPage=$这->路由器->生成(“sign_up”);//生成带有路由参数的URL$userProfilePage=$这->路由器->生成(“user_profile”, (“用户名”= >$用户->getUsername ()));//生成的url默认为“绝对路径”。传递第三个可选的//参数来生成不同的URL(例如,一个“绝对URL”)$signUpPage=$这->路由器->生成(“sign_up”, [], UrlGeneratorInterface::ABSOLUTE_URL);//当路由被本地化时,Symfony默认使用当前请求地区ob娱乐下载//如果你想显式地设置locale,传递一个不同的'_locale'值$signUpPageInDutch=$这->路由器->生成(“sign_up”, (“_locale”= >“问”]);/ /……}}
getRouteCollection ()方法,因为这会重新生成路由缓存并降低应用程序的速度。
相反,尝试生成URL并捕获RouteNotFoundException当路由不存在时抛出:
1 2 3 4 5 6 7 8 9
使用ob娱乐下载\组件\路由\异常\RouteNotFoundException;/ /……试一试{$url=$这->路由器->生成($routeName,$routeParameters);}抓(RouteNotFoundException$e){//路由没有定义…}
http默认情况下。你可以改变每个命令(通过路由器的getContext ()
方法)或全局使用这些配置参数:
- YAML
- XML
- PHP
1 2 3 4
#配置/ services.yaml参数:router.request_context.scheme:“https”asset.request_context.secure:真正的
在控制台命令之外,使用计划
选项,显式定义每条路由的方案:
- 注释
- YAML
- XML
- PHP
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16
/ / src /控制器/ SecurityController.php名称空间应用程序\控制器;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用ob娱乐下载\组件\路由\注释\路线;类SecurityController扩展AbstractController{/ * * *@Route("/login", name="login", schemes={"https"}) */公共函数登录(){/ /……}}
对象生成的URL登录
route将始终使用HTTPS。这意味着当使用路径()
Twig函数生成URL,如果原始请求的HTTP方案与路由使用的方案不同,你可能会得到一个绝对URL而不是相对URL:
1 2 3 4 5 6
{#如果当前方案是HTTPS,生成一个相对URL: /login #}{{path('login')}}{#如果当前方案是HTTP,生成一个绝对URL来改变方案:https://example.com/login #}{{path('login')}}
对于传入请求,也实施了方案需求。如果你试图访问/登录
URL与HTTP,您将自动重定向到相同的URL,但与HTTPS方案。
如果需要强制一组路由使用HTTPS协议,可以在引入路由时定义缺省方案。下面的例子强制所有定义为注解的路由使用HTTPS:
- YAML
- XML
- PHP
1 2 3 4 5 6
#配置/线路/ annotations.yaml控制器:资源:“. . / src /控制器/”类型:注释默认值:计划:(https)
请注意
Security组件提供另一种强制HTTP或HTTPS的方法通过requires_channel
设置。
blog_show
)和路由所定义的参数的值(例如:Slug = my blog-post
).的名字
选项,Symfoob娱乐下载ny会根据控制器和动作自动生成一个名称。AbstractController,使用generateUrl ()
助手:
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 32 33
/ / src /控制器/ BlogController.php名称空间应用程序\控制器;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用ob娱乐下载\组件\路由\注释\路线;使用ob娱乐下载\组件\路由\发电机\UrlGeneratorInterface;类BlogController扩展AbstractController{/ * * *@Route("/blog", name="blog_list") */公共函数列表(){/ /……//生成不带路由参数的URL$signUpPage=$这->generateUrl (“sign_up”);//生成带有路由参数的URL$userProfilePage=$这->generateUrl (“user_profile”, (“用户名”= >$用户->getUsername ()));//生成的url默认为“绝对路径”。传递第三个可选的//参数来生成不同的URL(例如,一个“绝对URL”)$signUpPage=$这->generateUrl (“sign_up”, [], UrlGeneratorInterface::ABSOLUTE_URL);//当路由被本地化时,Symfony默认使用当前请求地区ob娱乐下载//如果你想显式地设置locale,传递一个不同的'_locale'值$signUpPageInDutch=$这->generateUrl (“sign_up”, (“_locale”= >“问”]);}}
请注意
如果你通过generateUrl ()
方法一些不属于路由定义的参数,它们作为查询字符串包含在生成的URL中:
1 2 3
$这->generateUrl (“博客”, (“页面”= >2,“类别”= >Sob娱乐下载ymfony的]);// 'blog'路由只定义'page'参数;生成的URL为:/ / /博客/ 2 ?类别= Symfoob娱乐下载ny
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 32 33
/ / src /控制器/ BlogController.php名称空间应用程序\控制器;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用ob娱乐下载\组件\路由\注释\路线;使用ob娱乐下载\组件\路由\发电机\UrlGeneratorInterface;类BlogController扩展AbstractController{/ * * *@Route("/blog", name="blog_list") */公共函数列表(){/ /……//生成不带路由参数的URL$signUpPage=$这->generateUrl (“sign_up”);//生成带有路由参数的URL$userProfilePage=$这->generateUrl (“user_profile”, (“用户名”= >$用户->getUsername ()));//生成的url默认为“绝对路径”。传递第三个可选的//参数来生成不同的URL(例如,一个“绝对URL”)$signUpPage=$这->generateUrl (“sign_up”, [], UrlGeneratorInterface::ABSOLUTE_URL);//当路由被本地化时,Symfony默认使用当前请求地区ob娱乐下载//如果你想显式地设置locale,传递一个不同的'_locale'值$signUpPageInDutch=$这->generateUrl (“sign_up”, (“_locale”= >“问”]);}}
请注意
如果你通过generateUrl ()
方法一些不属于路由定义的参数,它们作为查询字符串包含在生成的URL中:
1 2 3
$这->generateUrl (“博客”, (“页面”= >2,“类别”= >Sob娱乐下载ymfony的]);// 'blog'路由只定义'page'参数;生成的URL为:/ / /博客/ 2 ?类别= Symfoob娱乐下载ny
如果您的控制器没有从AbstractController
,你需要在控制器中获取服务并按照下一节的说明进行操作。
路由器ob娱乐下载Symfony服务变成您自己的服务并使用它生成()
方法。当使用服务自动装配只需要在服务构造函数中添加参数,并使用UrlGeneratorInterface类:
12 34 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 32 33 34 35
/ / src /服务/ SomeService.php名称空间应用程序\服务;使用ob娱乐下载\组件\路由\发电机\UrlGeneratorInterface;类SomeService{私人$路由器;公共函数__construct(UrlGeneratorInterface$路由器){$这->路由器=$路由器;}公共函数someMethod(){/ /……//生成不带路由参数的URL$signUpPage=$这->路由器->生成(“sign_up”);//生成带有路由参数的URL$userProfilePage=$这->路由器->生成(“user_profile”, (“用户名”= >$用户->getUsername ()));//生成的url默认为“绝对路径”。传递第三个可选的//参数来生成不同的URL(例如,一个“绝对URL”)$signUpPage=$这->路由器->生成(“sign_up”, [], UrlGeneratorInterface::ABSOLUTE_URL);//当路由被本地化时,Symfony默认使用当前请求地区ob娱乐下载//如果你想显式地设置locale,传递一个不同的'_locale'值$signUpPageInDutch=$这->路由器->生成(“sign_up”, (“_locale”= >“问”]);}}
12 34 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 32 33 34 35
/ / src /服务/ SomeService.php名称空间应用程序\服务;使用ob娱乐下载\组件\路由\发电机\UrlGeneratorInterface;类SomeService{私人$路由器;公共函数__construct(UrlGeneratorInterface$路由器){$这->路由器=$路由器;}公共函数someMethod(){/ /……//生成不带路由参数的URL$signUpPage=$这->路由器->生成(“sign_up”);//生成带有路由参数的URL$userProfilePage=$这->路由器->生成(“user_profile”, (“用户名”= >$用户->getUsername ()));//生成的url默认为“绝对路径”。传递第三个可选的//参数来生成不同的URL(例如,一个“绝对URL”)$signUpPage=$这->路由器->生成(“sign_up”, [], UrlGeneratorInterface::ABSOLUTE_URL);//当路由被本地化时,Symfony默认使用当前请求地区ob娱乐下载//如果你想显式地设置locale,传递一个不同的'_locale'值$signUpPageInDutch=$这->路由器->生成(“sign_up”, (“_locale”= >“问”]);}}
在页面之间创建链接在关于Symfony模板的主要文章中。ob娱乐下载
路径()而且url ()
Twig函数生成url并将它们存储在JavaScript变量中。的escape ()
函数需要转义任何非javascript安全的值:
1 2 3
<脚本>常量路线="{{path('blog_show', {slug: 'my-blog-post'})|逃避(js)}}";脚本>
如果需要动态生成url,或者使用纯JavaScript代码,则此解决方案不起作用。在这些情况下,考虑使用FOSJsRoutingBundle.
1 2 3
<脚本>常量路线="{{path('blog_show', {slug: 'my-blog-post'})|逃避(js)}}";脚本>
在服务中生成url.唯一的区别是,命令不是在HTTP上下文中执行的,因此它们不能访问HTTP请求。在实践中,这意味着如果您生成绝对url,您将得到http://localhost/
作为主机名,而不是您的真实主机名。
解决方案是配置命令在生成url时使用的“请求上下文”。该上下文可以为所有命令全局配置:
- YAML
- XML
- PHP
1 2 3 4 5
#配置/ services.yaml参数:router.request_context.host:“example.org”router.request_context.base_url:“我的/路径”asset.request_context.base_path:“% router.request_context.base_url %”
该信息也可以配置每个命令:
12 34 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 32 33 34 35 36 37 38 39 40 41 42 43 44
/ / src /命令/ SomeCommand.php名称空间应用程序\命令;使用ob娱乐下载\组件\路由\发电机\UrlGeneratorInterface;使用ob娱乐下载\组件\路由\RouterInterface;/ /……类SomeCommand扩展命令{私人$路由器;公共函数__construct(RouterInterface$路由器){父::__construct ();$这->路由器=$路由器;}受保护的函数执行(InputInterface$输入, OutputInterface$输出){//这些值覆盖任何全局配置$上下文=$这->路由器->getContext ();$上下文->setHost (“example.com”);$上下文->setBaseUrl (“我的/路径”);//生成不带路由参数的URL$signUpPage=$这->路由器->生成(“sign_up”);//生成带有路由参数的URL$userProfilePage=$这->路由器->生成(“user_profile”, (“用户名”= >$用户->getUsername ()));//生成的url默认为“绝对路径”。传递第三个可选的//参数来生成不同的URL(例如,一个“绝对URL”)$signUpPage=$这->路由器->生成(“sign_up”, [], UrlGeneratorInterface::ABSOLUTE_URL);//当路由被本地化时,Symfony默认使用当前请求地区ob娱乐下载//如果你想显式地设置locale,传递一个不同的'_locale'值$signUpPageInDutch=$这->路由器->生成(“sign_up”, (“_locale”= >“问”]);/ /……}}
getRouteCollection ()方法,因为这会重新生成路由缓存并降低应用程序的速度。
相反,尝试生成URL并捕获RouteNotFoundException当路由不存在时抛出:
1 2 3 4 5 6 7 8 9
使用ob娱乐下载\组件\路由\异常\RouteNotFoundException;/ /……试一试{$url=$这->路由器->生成($routeName,$routeParameters);}抓(RouteNotFoundException$e){//路由没有定义…}
http默认情况下。你可以改变每个命令(通过路由器的getContext ()
方法)或全局使用这些配置参数:
- YAML
- XML
- PHP
1 2 3 4
#配置/ services.yaml参数:router.request_context.scheme:“https”asset.request_context.secure:真正的
在控制台命令之外,使用计划
选项,显式定义每条路由的方案:
- 注释
- YAML
- XML
- PHP
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16
/ / src /控制器/ SecurityController.php名称空间应用程序\控制器;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用ob娱乐下载\组件\路由\注释\路线;类SecurityController扩展AbstractController{/ * * *@Route("/login", name="login", schemes={"https"}) */公共函数登录(){/ /……}}
对象生成的URL登录
route将始终使用HTTPS。这意味着当使用路径()
Twig函数生成URL,如果原始请求的HTTP方案与路由使用的方案不同,你可能会得到一个绝对URL而不是相对URL:
1 2 3 4 5 6
{#如果当前方案是HTTPS,生成一个相对URL: /login #}{{path('login')}}{#如果当前方案是HTTP,生成一个绝对URL来改变方案:https://example.com/login #}{{path('login')}}
对于传入请求,也实施了方案需求。如果你试图访问/登录
URL与HTTP,您将自动重定向到相同的URL,但与HTTPS方案。
如果需要强制一组路由使用HTTPS协议,可以在引入路由时定义缺省方案。下面的例子强制所有定义为注解的路由使用HTTPS:
- YAML
- XML
- PHP
1 2 3 4 5 6
#配置/线路/ annotations.yaml控制器:资源:“. . / src /控制器/”类型:注释默认值:计划:(https)
请注意
Security组件提供另一种强制HTTP或HTTPS的方法通过requires_channel
设置。
- YAML
- XML
- PHP
1 2 3 4
#配置/ services.yaml参数:router.request_context.scheme:“https”asset.request_context.secure:真正的
计划
选项,显式定义每条路由的方案:- 注释
- YAML
- XML
- PHP
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16
/ / src /控制器/ SecurityController.php名称空间应用程序\控制器;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用ob娱乐下载\组件\路由\注释\路线;类SecurityController扩展AbstractController{/ * * *@Route("/login", name="login", schemes={"https"}) */公共函数登录(){/ /……}}
登录
route将始终使用HTTPS。这意味着当使用路径()
Twig函数生成URL,如果原始请求的HTTP方案与路由使用的方案不同,你可能会得到一个绝对URL而不是相对URL:1 2 3 4 5 6
{#如果当前方案是HTTPS,生成一个相对URL: /login #}{{path('login')}}{#如果当前方案是HTTP,生成一个绝对URL来改变方案:https://example.com/login #}{{path('login')}}
/登录
URL与HTTP,您将自动重定向到相同的URL,但与HTTPS方案。- YAML
- XML
- PHP
1 2 3 4 5 6
#配置/线路/ annotations.yaml控制器:资源:“. . / src /控制器/”类型:注释默认值:计划:(https)
请注意
Security组件提供另一种强制HTTP或HTTPS的方法通过requires_channel
设置。