路由
编辑该页面控制器动作生成响应。路由配置定义了哪些行动来运行为每个传入的URL。它还提供了其他有用的特性,比如生成seo友好的url(例如。/读/ intro-to-syob娱乐下载mfony
而不是index . php ? article_id = 57
)。
ob娱乐下载Symfony建议属性因为它是方便把路线和控制器在同一个地方。
控制器相关的路线。属性是原生PHP 8和更高版本,那么您可以使用它们。
您需要添加一个配置到你的项目中使用它们之前。如果您的项目使用ob娱乐下载Symfony Flex,这个文件已经为您创建。否则,手工创建以下文件:
1 2 3 4 5 6 7 8 9 10
#配置/线路/ attributes.yaml控制器:资源:路径:. . / . . / src /控制器/名称空间:App \控制器类型:属性内核:资源:App \内核类型:属性
这个配置告诉Symfony寻找路线定义为属性在类中ob娱乐下载声明App \控制器
名称空间和存储在src /控制器/
目录此前PSR-4标准。内核也可以充当控制器,这是特别适合作为microframework使用Symfony的小型应用程序。ob娱乐下载
6.2
功能从PSR-4进口路线名称空间的根是在Symfony 6.2中引入的。ob娱乐下载
假设您想定义的路线/博客
URL在您的应用程序。为此,创建一个控制器类如下:
- 属性
1 2 3 4 5 6 7 8 9 10 11 12 13 14
/ / src /控制器/ BlogController.php名称空间应用程序\控制器;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用ob娱乐下载\组件\路由\注释\路线;类BlogController扩展AbstractController{#(路线(“/博客”,名字:“blog_list”))公共函数列表():响应{/ /……}}
这个配置定义了一个路线blog_list
当用户请求相匹配/博客
URL。发生匹配时,应用程序运行列表()
的方法BlogController
类。
请注意
一个URL的查询字符串匹配时不考虑路线。在本例中,url/博客? foo = bar
和/博客? foo = bar bar = foo
也会匹配blog_list
路线。
谨慎
如果你在同一个文件中定义多个PHP类,Symfony只有加载航线的头等舱,忽略所有其他路线。ob娱乐下载
路线名称(blog_list
)并不重要,但以后这将是必不可少的生成的url。你只需要记住,在应用程序中每个路线名称必须是惟一的。
blog_list相关联的/博客
URL的列表()
行动的BlogController
:
- YAML
- XML
- PHP
1 2 3 4 5 6 7 8 9
#配置/ routes.yamlblog_list:路径:/博客#控制器值格式“controller_class: method_name”控制器:控制器应用\ \ BlogController:列表#如果行动作为__invoke()方法的实现#控制器类,您可以跳过“::method_name”部分:控制器:控制器应用\ \ BlogController
请注意
默认情况下Symfonob娱乐下载y只加载路径中定义YAML格式。如果您定义在XML和/或PHP格式,你需要更新src /内核。php文件。
得到,帖子
,把
等)的使用方法
选项限制动词每个路线应该回应:
- 属性
- YAML
- XML
- PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
/ / src /控制器/ BlogApiController.php名称空间应用程序\控制器;/ /……类BlogApiController扩展AbstractController{#(路线(' / api /文章/ {id}’,方法:[‘得到’,‘头’]))公共函数显示(int美元id):响应{/ /……后返回一个JSON响应}#(路线(' / api /文章/ {id}’,方法:['使']))公共函数编辑(int美元id):响应{/ /……编辑一篇文章}}
提示
HTML表单只支持得到
和帖子
方法。如果你调用路线用不同的方法从一个HTML表单,添加一个隐藏字段_method
方法使用(如。< input type = "隐藏" name = " _method " value = "把" >
)。如果您创建表单ob娱乐下载Symfony的形式这是自动完成的时候framework.http_method_override选择是真正的
。
条件选择如果你需要一些途径匹配基于任意匹配逻辑:
- 属性
- 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日27 28 29 30 31 32
/ / src /控制器/ DefaultController.php名称空间应用程序\控制器;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用ob娱乐下载\组件\HttpFoundation\响应;使用ob娱乐下载\组件\路由\注释\路线;类DefaultController扩展AbstractController{#(路线(' /接触'名称:“接触”条件:“context.getMethod()[‘得到’,‘头’]和request.headers.get(“用户代理”)匹配/ firefox /我”,/ /表达式还可以包括配置参数:/ /条件:“request.headers.get(“用户代理”)匹配% app.allowed_browsers %”)]公共函数联系():响应{/ /……}#(路线(“/文章/ {id}”名称:“post_show”,/ /表达式可以检索参数值使用“参数”变量条件:“params [“id”] < 1000”)]公共函数showPost(int美元id):响应{/ /……后返回一个JSON响应}}
的值条件
选择是任何有效的ExpressionLanguage表达式可以使用任何这些Symfony创建的变量:ob娱乐下载
-
上下文
-
的一个实例RequestContext持有最基本匹配的路由信息。
-
请求
-
的ob娱乐下载Symfony的请求对象代表了当前请求。
-
参数个数
-
一个匹配的数组线路参数对当前路线。
6.1
的参数个数
变量是在Symfony 6.1中引入的。ob娱乐下载
您还可以使用这些函数:
-
env(字符串名称)美元
-
返回一个变量的值使用环境变量的处理器
-
服务(字符串$别名)
-
返回一个路由条件服务。
首先,添加# (AsRoutingConditionService)
属性或routing.condition_service
标签服务,您想要使用的路线条件:
1 2 3 4 5 6 7 8 9 10 11
使用ob娱乐下载\包\FrameworkBundle\路由\属性\AsRoutingConditionService;使用ob娱乐下载\组件\HttpFoundation\请求;# (AsRoutingConditionService(别名:route_checker)]类RouteChecker{公共函数检查(请求美元请求):bool{/ /……}}
然后,使用服务()
函数引用服务内部条件:
1 2 3 4
/ /控制器(使用别名):#(路线(条件:“服务(route_checker)支票(请求)))/ /或没有别名:#[路线(条件:“服务(“美联社服务\ \ \ \ \ \ RouteChecker ')支票(请求)))
6.1
的服务(字符串$别名)
功能和# (AsRoutingConditionService)
属性是在Symfony 6.1中引入的。ob娱乐下载
在幕后,表达式编译原始PHP。因此,使用条件
主要原因没有额外的开销超出了时间底层PHP执行。
谨慎
条件是不 考虑当生成url(本文后面会详细解释)。
/博客)。然而,它的共同定义路线部分变量。例如,URL显示一些博客可能会包括标题或蛞蝓(如。/博客/第一篇博客
或/博客/ all-about-sob娱乐下载ymfony
)。
在Syob娱乐下载mfony的路线,变量部分是裹着{…}
他们必须有一个唯一的名称。例如,路线显示博客内容被定义为/博客/{蛞蝓}
:
- 属性
- YAML
- XML
- PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
/ / src /控制器/ BlogController.php名称空间应用程序\控制器;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用ob娱乐下载\组件\HttpFoundation\响应;使用ob娱乐下载\组件\路由\注释\路线;类BlogController扩展AbstractController{/ /……#(路线(“/博客/{蛞蝓}”,名字:“blog_show”))公共函数显示(字符串美元鼻涕虫):响应{/ /美元料将平等的动态URL的一部分/ /如在/博客/ yay-routing,那么$蛞蝓=“yay-routing”/ /……}}
变量的名称部分({蛞蝓}
在这个例子中)用于创建一个PHP变量,这条路线内容存储和传递给控制器。如果一个用户访问/博客/第一篇博客
URL, ob娱乐下载Symfony执行显示()
方法BlogController
类和通过蛞蝓=美元的第一篇博客
参数显示()
方法。
路线可以定义任意数量的参数,但是每个人只能使用一次(如在每个路线。/博客/关于-{类别}/页面/ {pageNumber}
)。
blog_show路线(网址:/博客/{蛞蝓}
)和一个blog_list
路线(网址:页面/博客/ {}
)。鉴于线路参数接受任何价值,没有办法区分两种路线。
如果用户请求/博客/第一篇博客
路线将匹配和Symfony将使用第一个定义的路线。ob娱乐下载为了解决这个问题,添加一些验证{页面}
参数使用需求
选择:
- 属性
- YAML
- XML
- PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
/ / src /控制器/ BlogController.php名称空间应用程序\控制器;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用ob娱乐下载\组件\HttpFoundation\响应;使用ob娱乐下载\组件\路由\注释\路线;类BlogController扩展AbstractController{#(路线(“/博客/{页面}”,名字:“blog_list”,要求:['页' = > ' \ d + ']))公共函数列表(int美元页面):响应{/ /……}#(路线(“/博客/{蛞蝓}”,名字:“blog_show”))公共函数显示(美元鼻涕虫):响应{/ /……}}
的需求
选项定义了PHP正则表达式这条路必须匹配整个路线匹配参数。在这个例子中,\ d +
是一个正则表达式相匹配的数字 任何长度。现在:
URL
路线
参数
/博客/ 2
blog_list
美元的页面
=2
/博客/第一篇博客
blog_show
美元蛞蝓
=第一篇博客
提示
路线需求(和路由路径)可以包括配置参数定义复杂的正则表达式,它是有用的在多个线路一旦和重用它们。
提示
参数也支持PCRE Unicode属性的转义序列匹配通用字符类型。例如,陆\ p {}
匹配任何大写字符在任何语言中,希腊\ p {}
匹配任何希腊字符等。
请注意
当使用正则表达式在路由参数,您可以设置use utf8
路线选择真正的
做出任何。
字符匹配任何utf - 8字符而不是单个字节。
如果你喜欢,需求可以在每个参数使用内联语法{parameter_name <规定>}
。这个特性使得配置更简洁,但它可以减少路由可读性时需求是复杂的:
- 属性
- YAML
- XML
- PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
/ / src /控制器/ BlogController.php名称空间应用程序\控制器;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用ob娱乐下载\组件\HttpFoundation\响应;使用ob娱乐下载\组件\路由\注释\路线;类BlogController扩展AbstractController{#(路线(' /博客/{页< \ d + >}’,名字:“blog_list”))公共函数列表(int美元页面):响应{/ /……}}
现在,保持之前的路由配置,但是改变控制器参数的行动。而不是字符串$蛞蝓
,添加BlogPost美元后
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
/ / src /控制器/ BlogController.php名称空间应用程序\控制器;使用应用程序\实体\博客;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用ob娱乐下载\组件\HttpFoundation\响应;使用ob娱乐下载\组件\路由\注释\路线;类BlogController扩展AbstractController{/ /……#(路线(“/博客/{蛞蝓}”,名字:“blog_show”))公共函数显示(博客美元帖子):响应{/ /后美元蛞蝓路由参数相匹配的对象/ /……}}
如果你的控制器参数包括类型提示对象(博客
在这种情况下),“param转换器”使数据库请求找到对象使用请求参数(鼻涕虫
在这种情况下)。如果没有找到对象,Symfony自动生成一个4ob娱乐下载04响应。
读了完整的参数转换文档欧宝官网下载app了解Symfony提供的转换器以及如何配置它们。ob娱乐下载
-
_controller
-
这个参数是用来确定哪些控制器和执行行动路线相匹配。
-
_format
-
匹配的值用于设置的“请求格式”
请求
对象。这是用于诸如设置内容类型
的响应(如json
格式转换为内容类型
的application / json
)。
-
_fragment
-
用于设置片段标识符,这是可选的最后一个URL的一部分,从一开始
#
性格和用于标识文档的一部分。
-
_locale
-
用于设置语言环境在请求。
(除了可以包含这些属性_fragment
)在个别航线和航线进口。ob娱乐下载Symfony定义一些特殊的属性名称相同的(主要强调除外),这样你就可以定义它们容易些:
- 属性
- YAML
- XML
- PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
/ / src /控制器/ ArticleController.php名称空间应用程序\控制器;/ /……类ArticleController扩展AbstractController{#(路线(路径:' / / {_locale} /搜索文章。{_format}’地区:“en”格式:“html”,要求:“_locale”= >“en | fr”,“_format”= >“html | xml”),)公共函数搜索():响应{}}
ob娱乐下载Symfony建议属性因为它是方便把路线和控制器在同一个地方。
控制器相关的路线。属性是原生PHP 8和更高版本,那么您可以使用它们。
您需要添加一个配置到你的项目中使用它们之前。如果您的项目使用ob娱乐下载Symfony Flex,这个文件已经为您创建。否则,手工创建以下文件:
1 2 3 4 5 6 7 8 9 10
#配置/线路/ attributes.yaml控制器:资源:路径:. . / . . / src /控制器/名称空间:App \控制器类型:属性内核:资源:App \内核类型:属性
这个配置告诉Symfony寻找路线定义为属性在类中ob娱乐下载声明App \控制器
名称空间和存储在src /控制器/
目录此前PSR-4标准。内核也可以充当控制器,这是特别适合作为microframework使用Symfony的小型应用程序。ob娱乐下载
6.2
功能从PSR-4进口路线名称空间的根是在Symfony 6.2中引入的。ob娱乐下载
假设您想定义的路线/博客
URL在您的应用程序。为此,创建一个控制器类如下:
- 属性
1 2 3 4 5 6 7 8 9 10 11 12 13 14
/ / src /控制器/ BlogController.php名称空间应用程序\控制器;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用ob娱乐下载\组件\路由\注释\路线;类BlogController扩展AbstractController{#(路线(“/博客”,名字:“blog_list”))公共函数列表():响应{/ /……}}
这个配置定义了一个路线blog_list
当用户请求相匹配/博客
URL。发生匹配时,应用程序运行列表()
的方法BlogController
类。
请注意
一个URL的查询字符串匹配时不考虑路线。在本例中,url/博客? foo = bar
和/博客? foo = bar bar = foo
也会匹配blog_list
路线。
谨慎
如果你在同一个文件中定义多个PHP类,Symfony只有加载航线的头等舱,忽略所有其他路线。ob娱乐下载
路线名称(blog_list
)并不重要,但以后这将是必不可少的生成的url。你只需要记住,在应用程序中每个路线名称必须是惟一的。
blog_list相关联的/博客
URL的列表()
行动的BlogController
:
- YAML
- XML
- PHP
1 2 3 4 5 6 7 8 9
#配置/ routes.yamlblog_list:路径:/博客#控制器值格式“controller_class: method_name”控制器:控制器应用\ \ BlogController:列表#如果行动作为__invoke()方法的实现#控制器类,您可以跳过“::method_name”部分:控制器:控制器应用\ \ BlogController
请注意
默认情况下Symfonob娱乐下载y只加载路径中定义YAML格式。如果您定义在XML和/或PHP格式,你需要更新src /内核。php文件。
得到,帖子
,把
等)的使用方法
选项限制动词每个路线应该回应:
- 属性
- YAML
- XML
- PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
/ / src /控制器/ BlogApiController.php名称空间应用程序\控制器;/ /……类BlogApiController扩展AbstractController{#(路线(' / api /文章/ {id}’,方法:[‘得到’,‘头’]))公共函数显示(int美元id):响应{/ /……后返回一个JSON响应}#(路线(' / api /文章/ {id}’,方法:['使']))公共函数编辑(int美元id):响应{/ /……编辑一篇文章}}
提示
HTML表单只支持得到
和帖子
方法。如果你调用路线用不同的方法从一个HTML表单,添加一个隐藏字段_method
方法使用(如。< input type = "隐藏" name = " _method " value = "把" >
)。如果您创建表单ob娱乐下载Symfony的形式这是自动完成的时候framework.http_method_override选择是真正的
。
条件选择如果你需要一些途径匹配基于任意匹配逻辑:
- 属性
- 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日27 28 29 30 31 32
/ / src /控制器/ DefaultController.php名称空间应用程序\控制器;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用ob娱乐下载\组件\HttpFoundation\响应;使用ob娱乐下载\组件\路由\注释\路线;类DefaultController扩展AbstractController{#(路线(' /接触'名称:“接触”条件:“context.getMethod()[‘得到’,‘头’]和request.headers.get(“用户代理”)匹配/ firefox /我”,/ /表达式还可以包括配置参数:/ /条件:“request.headers.get(“用户代理”)匹配% app.allowed_browsers %”)]公共函数联系():响应{/ /……}#(路线(“/文章/ {id}”名称:“post_show”,/ /表达式可以检索参数值使用“参数”变量条件:“params [“id”] < 1000”)]公共函数showPost(int美元id):响应{/ /……后返回一个JSON响应}}
的值条件
选择是任何有效的ExpressionLanguage表达式可以使用任何这些Symfony创建的变量:ob娱乐下载
-
上下文
-
的一个实例RequestContext持有最基本匹配的路由信息。
-
请求
-
的ob娱乐下载Symfony的请求对象代表了当前请求。
-
参数个数
-
一个匹配的数组线路参数对当前路线。
6.1
的参数个数
变量是在Symfony 6.1中引入的。ob娱乐下载
您还可以使用这些函数:
-
env(字符串名称)美元
-
返回一个变量的值使用环境变量的处理器
-
服务(字符串$别名)
-
返回一个路由条件服务。
首先,添加# (AsRoutingConditionService)
属性或routing.condition_service
标签服务,您想要使用的路线条件:
1 2 3 4 5 6 7 8 9 10 11
使用ob娱乐下载\包\FrameworkBundle\路由\属性\AsRoutingConditionService;使用ob娱乐下载\组件\HttpFoundation\请求;# (AsRoutingConditionService(别名:route_checker)]类RouteChecker{公共函数检查(请求美元请求):bool{/ /……}}
然后,使用服务()
函数引用服务内部条件:
1 2 3 4
/ /控制器(使用别名):#(路线(条件:“服务(route_checker)支票(请求)))/ /或没有别名:#[路线(条件:“服务(“美联社服务\ \ \ \ \ \ RouteChecker ')支票(请求)))
6.1
的服务(字符串$别名)
功能和# (AsRoutingConditionService)
属性是在Symfony 6.1中引入的。ob娱乐下载
在幕后,表达式编译原始PHP。因此,使用条件
主要原因没有额外的开销超出了时间底层PHP执行。
谨慎
条件是不 考虑当生成url(本文后面会详细解释)。
控制器相关的路线。属性是原生PHP 8和更高版本,那么您可以使用它们。
您需要添加一个配置到你的项目中使用它们之前。如果您的项目使用ob娱乐下载Symfony Flex,这个文件已经为您创建。否则,手工创建以下文件:
1 2 3 4 5 6 7 8 9 10
#配置/线路/ attributes.yaml控制器:资源:路径:. . / . . / src /控制器/名称空间:App \控制器类型:属性内核:资源:App \内核类型:属性
这个配置告诉Symfony寻找路线定义为属性在类中ob娱乐下载声明App \控制器
名称空间和存储在src /控制器/
目录此前PSR-4标准。内核也可以充当控制器,这是特别适合作为microframework使用Symfony的小型应用程序。ob娱乐下载
6.2
功能从PSR-4进口路线名称空间的根是在Symfony 6.2中引入的。ob娱乐下载
假设您想定义的路线/博客
URL在您的应用程序。为此,创建一个控制器类如下:
- 属性
1 2 3 4 5 6 7 8 9 10 11 12 13 14
/ / src /控制器/ BlogController.php名称空间应用程序\控制器;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用ob娱乐下载\组件\路由\注释\路线;类BlogController扩展AbstractController{#(路线(“/博客”,名字:“blog_list”))公共函数列表():响应{/ /……}}
这个配置定义了一个路线blog_list
当用户请求相匹配/博客
URL。发生匹配时,应用程序运行列表()
的方法BlogController
类。
请注意
一个URL的查询字符串匹配时不考虑路线。在本例中,url/博客? foo = bar
和/博客? foo = bar bar = foo
也会匹配blog_list
路线。
谨慎
如果你在同一个文件中定义多个PHP类,Symfony只有加载航线的头等舱,忽略所有其他路线。ob娱乐下载
路线名称(blog_list
)并不重要,但以后这将是必不可少的生成的url。你只需要记住,在应用程序中每个路线名称必须是惟一的。
blog_list相关联的/博客
URL的列表()
行动的BlogController
:
- YAML
- XML
- PHP
1 2 3 4 5 6 7 8 9
#配置/ routes.yamlblog_list:路径:/博客#控制器值格式“controller_class: method_name”控制器:控制器应用\ \ BlogController:列表#如果行动作为__invoke()方法的实现#控制器类,您可以跳过“::method_name”部分:控制器:控制器应用\ \ BlogController
请注意
默认情况下Symfonob娱乐下载y只加载路径中定义YAML格式。如果您定义在XML和/或PHP格式,你需要更新src /内核。php文件。
- YAML
- XML
- PHP
1 2 3 4 5 6 7 8 9
#配置/ routes.yamlblog_list:路径:/博客#控制器值格式“controller_class: method_name”控制器:控制器应用\ \ BlogController:列表#如果行动作为__invoke()方法的实现#控制器类,您可以跳过“::method_name”部分:控制器:控制器应用\ \ BlogController
请注意
默认情况下Symfonob娱乐下载y只加载路径中定义YAML格式。如果您定义在XML和/或PHP格式,你需要更新src /内核。php文件。
得到,帖子
,把
等)的使用方法
选项限制动词每个路线应该回应:
- 属性
- YAML
- XML
- PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
/ / src /控制器/ BlogApiController.php名称空间应用程序\控制器;/ /……类BlogApiController扩展AbstractController{#(路线(' / api /文章/ {id}’,方法:[‘得到’,‘头’]))公共函数显示(int美元id):响应{/ /……后返回一个JSON响应}#(路线(' / api /文章/ {id}’,方法:['使']))公共函数编辑(int美元id):响应{/ /……编辑一篇文章}}
提示
HTML表单只支持得到
和帖子
方法。如果你调用路线用不同的方法从一个HTML表单,添加一个隐藏字段_method
方法使用(如。< input type = "隐藏" name = " _method " value = "把" >
)。如果您创建表单ob娱乐下载Symfony的形式这是自动完成的时候framework.http_method_override选择是真正的
。
- 属性
- YAML
- XML
- PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
/ / src /控制器/ BlogApiController.php名称空间应用程序\控制器;/ /……类BlogApiController扩展AbstractController{#(路线(' / api /文章/ {id}’,方法:[‘得到’,‘头’]))公共函数显示(int美元id):响应{/ /……后返回一个JSON响应}#(路线(' / api /文章/ {id}’,方法:['使']))公共函数编辑(int美元id):响应{/ /……编辑一篇文章}}
提示
HTML表单只支持得到
和帖子
方法。如果你调用路线用不同的方法从一个HTML表单,添加一个隐藏字段_method
方法使用(如。< input type = "隐藏" name = " _method " value = "把" >
)。如果您创建表单ob娱乐下载Symfony的形式这是自动完成的时候framework.http_method_override选择是真正的
。
条件选择如果你需要一些途径匹配基于任意匹配逻辑:
- 属性
- 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日27 28 29 30 31 32
/ / src /控制器/ DefaultController.php名称空间应用程序\控制器;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用ob娱乐下载\组件\HttpFoundation\响应;使用ob娱乐下载\组件\路由\注释\路线;类DefaultController扩展AbstractController{#(路线(' /接触'名称:“接触”条件:“context.getMethod()[‘得到’,‘头’]和request.headers.get(“用户代理”)匹配/ firefox /我”,/ /表达式还可以包括配置参数:/ /条件:“request.headers.get(“用户代理”)匹配% app.allowed_browsers %”)]公共函数联系():响应{/ /……}#(路线(“/文章/ {id}”名称:“post_show”,/ /表达式可以检索参数值使用“参数”变量条件:“params [“id”] < 1000”)]公共函数showPost(int美元id):响应{/ /……后返回一个JSON响应}}
的值条件
选择是任何有效的ExpressionLanguage表达式可以使用任何这些Symfony创建的变量:ob娱乐下载
-
上下文
-
的一个实例RequestContext持有最基本匹配的路由信息。
-
请求
-
的ob娱乐下载Symfony的请求对象代表了当前请求。
-
参数个数
-
一个匹配的数组线路参数对当前路线。
6.1
的参数个数
变量是在Symfony 6.1中引入的。ob娱乐下载
您还可以使用这些函数:
-
env(字符串名称)美元
-
返回一个变量的值使用环境变量的处理器
-
服务(字符串$别名)
-
返回一个路由条件服务。
首先,添加# (AsRoutingConditionService)
属性或routing.condition_service
标签服务,您想要使用的路线条件:
1 2 3 4 5 6 7 8 9 10 11
使用ob娱乐下载\包\FrameworkBundle\路由\属性\AsRoutingConditionService;使用ob娱乐下载\组件\HttpFoundation\请求;# (AsRoutingConditionService(别名:route_checker)]类RouteChecker{公共函数检查(请求美元请求):bool{/ /……}}
然后,使用服务()
函数引用服务内部条件:
1 2 3 4
/ /控制器(使用别名):#(路线(条件:“服务(route_checker)支票(请求)))/ /或没有别名:#[路线(条件:“服务(“美联社服务\ \ \ \ \ \ RouteChecker ')支票(请求)))
6.1
的服务(字符串$别名)
功能和# (AsRoutingConditionService)
属性是在Symfony 6.1中引入的。ob娱乐下载
在幕后,表达式编译原始PHP。因此,使用条件
主要原因没有额外的开销超出了时间底层PHP执行。
谨慎
条件是不 考虑当生成url(本文后面会详细解释)。
- 属性
- 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日27 28 29 30 31 32
/ / src /控制器/ DefaultController.php名称空间应用程序\控制器;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用ob娱乐下载\组件\HttpFoundation\响应;使用ob娱乐下载\组件\路由\注释\路线;类DefaultController扩展AbstractController{#(路线(' /接触'名称:“接触”条件:“context.getMethod()[‘得到’,‘头’]和request.headers.get(“用户代理”)匹配/ firefox /我”,/ /表达式还可以包括配置参数:/ /条件:“request.headers.get(“用户代理”)匹配% app.allowed_browsers %”)]公共函数联系():响应{/ /……}#(路线(“/文章/ {id}”名称:“post_show”,/ /表达式可以检索参数值使用“参数”变量条件:“params [“id”] < 1000”)]公共函数showPost(int美元id):响应{/ /……后返回一个JSON响应}}
条件
选择是任何有效的ExpressionLanguage表达式可以使用任何这些Symfony创建的变量:ob娱乐下载上下文
请求
参数个数
6.1
的参数个数
变量是在Symfony 6.1中引入的。ob娱乐下载
env(字符串名称)美元
服务(字符串$别名)
返回一个路由条件服务。
首先,添加# (AsRoutingConditionService)
属性或routing.condition_service
标签服务,您想要使用的路线条件:
1 2 3 4 5 6 7 8 9 10 11
使用ob娱乐下载\包\FrameworkBundle\路由\属性\AsRoutingConditionService;使用ob娱乐下载\组件\HttpFoundation\请求;# (AsRoutingConditionService(别名:route_checker)]类RouteChecker{公共函数检查(请求美元请求):bool{/ /……}}
然后,使用服务()
函数引用服务内部条件:
1 2 3 4
/ /控制器(使用别名):#(路线(条件:“服务(route_checker)支票(请求)))/ /或没有别名:#[路线(条件:“服务(“美联社服务\ \ \ \ \ \ RouteChecker ')支票(请求)))
6.1
的服务(字符串$别名)
功能和# (AsRoutingConditionService)
属性是在Symfony 6.1中引入的。ob娱乐下载
条件
主要原因没有额外的开销超出了时间底层PHP执行。谨慎
条件是
/博客)。然而,它的共同定义路线部分变量。例如,URL显示一些博客可能会包括标题或蛞蝓(如。/博客/第一篇博客
或/博客/ all-about-sob娱乐下载ymfony
)。
在Syob娱乐下载mfony的路线,变量部分是裹着{…}
他们必须有一个唯一的名称。例如,路线显示博客内容被定义为/博客/{蛞蝓}
:
- 属性
- YAML
- XML
- PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
/ / src /控制器/ BlogController.php名称空间应用程序\控制器;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用ob娱乐下载\组件\HttpFoundation\响应;使用ob娱乐下载\组件\路由\注释\路线;类BlogController扩展AbstractController{/ /……#(路线(“/博客/{蛞蝓}”,名字:“blog_show”))公共函数显示(字符串美元鼻涕虫):响应{/ /美元料将平等的动态URL的一部分/ /如在/博客/ yay-routing,那么$蛞蝓=“yay-routing”/ /……}}
变量的名称部分({蛞蝓}
在这个例子中)用于创建一个PHP变量,这条路线内容存储和传递给控制器。如果一个用户访问/博客/第一篇博客
URL, ob娱乐下载Symfony执行显示()
方法BlogController
类和通过蛞蝓=美元的第一篇博客
参数显示()
方法。
路线可以定义任意数量的参数,但是每个人只能使用一次(如在每个路线。/博客/关于-{类别}/页面/ {pageNumber}
)。
blog_show路线(网址:/博客/{蛞蝓}
)和一个blog_list
路线(网址:页面/博客/ {}
)。鉴于线路参数接受任何价值,没有办法区分两种路线。
如果用户请求/博客/第一篇博客
路线将匹配和Symfony将使用第一个定义的路线。ob娱乐下载为了解决这个问题,添加一些验证{页面}
参数使用需求
选择:
- 属性
- YAML
- XML
- PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
/ / src /控制器/ BlogController.php名称空间应用程序\控制器;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用ob娱乐下载\组件\HttpFoundation\响应;使用ob娱乐下载\组件\路由\注释\路线;类BlogController扩展AbstractController{#(路线(“/博客/{页面}”,名字:“blog_list”,要求:['页' = > ' \ d + ']))公共函数列表(int美元页面):响应{/ /……}#(路线(“/博客/{蛞蝓}”,名字:“blog_show”))公共函数显示(美元鼻涕虫):响应{/ /……}}
的需求
选项定义了PHP正则表达式这条路必须匹配整个路线匹配参数。在这个例子中,\ d +
是一个正则表达式相匹配的数字 任何长度。现在:
URL
路线
参数
/博客/ 2
blog_list
美元的页面
=2
/博客/第一篇博客
blog_show
美元蛞蝓
=第一篇博客
提示
路线需求(和路由路径)可以包括配置参数定义复杂的正则表达式,它是有用的在多个线路一旦和重用它们。
提示
参数也支持PCRE Unicode属性的转义序列匹配通用字符类型。例如,陆\ p {}
匹配任何大写字符在任何语言中,希腊\ p {}
匹配任何希腊字符等。
请注意
当使用正则表达式在路由参数,您可以设置use utf8
路线选择真正的
做出任何。
字符匹配任何utf - 8字符而不是单个字节。
如果你喜欢,需求可以在每个参数使用内联语法{parameter_name <规定>}
。这个特性使得配置更简洁,但它可以减少路由可读性时需求是复杂的:
- 属性
- YAML
- XML
- PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
/ / src /控制器/ BlogController.php名称空间应用程序\控制器;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用ob娱乐下载\组件\HttpFoundation\响应;使用ob娱乐下载\组件\路由\注释\路线;类BlogController扩展AbstractController{#(路线(' /博客/{页< \ d + >}’,名字:“blog_list”))公共函数列表(int美元页面):响应{/ /……}}
现在,保持之前的路由配置,但是改变控制器参数的行动。而不是字符串$蛞蝓
,添加BlogPost美元后
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
/ / src /控制器/ BlogController.php名称空间应用程序\控制器;使用应用程序\实体\博客;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用ob娱乐下载\组件\HttpFoundation\响应;使用ob娱乐下载\组件\路由\注释\路线;类BlogController扩展AbstractController{/ /……#(路线(“/博客/{蛞蝓}”,名字:“blog_show”))公共函数显示(博客美元帖子):响应{/ /后美元蛞蝓路由参数相匹配的对象/ /……}}
如果你的控制器参数包括类型提示对象(博客
在这种情况下),“param转换器”使数据库请求找到对象使用请求参数(鼻涕虫
在这种情况下)。如果没有找到对象,Symfony自动生成一个4ob娱乐下载04响应。
读了完整的参数转换文档欧宝官网下载app了解Symfony提供的转换器以及如何配置它们。ob娱乐下载
{…}
他们必须有一个唯一的名称。例如,路线显示博客内容被定义为/博客/{蛞蝓}
:- 属性
- YAML
- XML
- PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
/ / src /控制器/ BlogController.php名称空间应用程序\控制器;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用ob娱乐下载\组件\HttpFoundation\响应;使用ob娱乐下载\组件\路由\注释\路线;类BlogController扩展AbstractController{/ /……#(路线(“/博客/{蛞蝓}”,名字:“blog_show”))公共函数显示(字符串美元鼻涕虫):响应{/ /美元料将平等的动态URL的一部分/ /如在/博客/ yay-routing,那么$蛞蝓=“yay-routing”/ /……}}
{蛞蝓}
在这个例子中)用于创建一个PHP变量,这条路线内容存储和传递给控制器。如果一个用户访问/博客/第一篇博客
URL, ob娱乐下载Symfony执行显示()
方法BlogController
类和通过蛞蝓=美元的第一篇博客
参数显示()
方法。/博客/关于-{类别}/页面/ {pageNumber}
)。blog_show路线(网址:/博客/{蛞蝓}
)和一个blog_list
路线(网址:页面/博客/ {}
)。鉴于线路参数接受任何价值,没有办法区分两种路线。
如果用户请求/博客/第一篇博客
路线将匹配和Symfony将使用第一个定义的路线。ob娱乐下载为了解决这个问题,添加一些验证{页面}
参数使用需求
选择:
- 属性
- YAML
- XML
- PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
/ / src /控制器/ BlogController.php名称空间应用程序\控制器;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用ob娱乐下载\组件\HttpFoundation\响应;使用ob娱乐下载\组件\路由\注释\路线;类BlogController扩展AbstractController{#(路线(“/博客/{页面}”,名字:“blog_list”,要求:['页' = > ' \ d + ']))公共函数列表(int美元页面):响应{/ /……}#(路线(“/博客/{蛞蝓}”,名字:“blog_show”))公共函数显示(美元鼻涕虫):响应{/ /……}}
的需求
选项定义了PHP正则表达式这条路必须匹配整个路线匹配参数。在这个例子中,\ d +
是一个正则表达式相匹配的数字 任何长度。现在:
URL
路线
参数
/博客/ 2
blog_list
美元的页面
=2
/博客/第一篇博客
blog_show
美元蛞蝓
=第一篇博客
提示
路线需求(和路由路径)可以包括配置参数定义复杂的正则表达式,它是有用的在多个线路一旦和重用它们。
提示
参数也支持PCRE Unicode属性的转义序列匹配通用字符类型。例如,陆\ p {}
匹配任何大写字符在任何语言中,希腊\ p {}
匹配任何希腊字符等。
请注意
当使用正则表达式在路由参数,您可以设置use utf8
路线选择真正的
做出任何。
字符匹配任何utf - 8字符而不是单个字节。
如果你喜欢,需求可以在每个参数使用内联语法{parameter_name <规定>}
。这个特性使得配置更简洁,但它可以减少路由可读性时需求是复杂的:
- 属性
- YAML
- XML
- PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
/ / src /控制器/ BlogController.php名称空间应用程序\控制器;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用ob娱乐下载\组件\HttpFoundation\响应;使用ob娱乐下载\组件\路由\注释\路线;类BlogController扩展AbstractController{#(路线(' /博客/{页< \ d + >}’,名字:“blog_list”))公共函数列表(int美元页面):响应{/ /……}}
/博客/第一篇博客
路线将匹配和Symfony将使用第一个定义的路线。ob娱乐下载为了解决这个问题,添加一些验证{页面}
参数使用需求
选择:- 属性
- YAML
- XML
- PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
/ / src /控制器/ BlogController.php名称空间应用程序\控制器;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用ob娱乐下载\组件\HttpFoundation\响应;使用ob娱乐下载\组件\路由\注释\路线;类BlogController扩展AbstractController{#(路线(“/博客/{页面}”,名字:“blog_list”,要求:['页' = > ' \ d + ']))公共函数列表(int美元页面):响应{/ /……}#(路线(“/博客/{蛞蝓}”,名字:“blog_show”))公共函数显示(美元鼻涕虫):响应{/ /……}}
需求
选项定义了PHP正则表达式这条路必须匹配整个路线匹配参数。在这个例子中,\ d +
是一个正则表达式相匹配的URL | 路线 | 参数 |
---|---|---|
/博客/ 2 |
blog_list |
美元的页面 =2 |
/博客/第一篇博客 |
blog_show |
美元蛞蝓 =第一篇博客 |
提示
路线需求(和路由路径)可以包括配置参数定义复杂的正则表达式,它是有用的在多个线路一旦和重用它们。
提示
参数也支持PCRE Unicode属性的转义序列匹配通用字符类型。例如,陆\ p {}
匹配任何大写字符在任何语言中,希腊\ p {}
匹配任何希腊字符等。
请注意
当使用正则表达式在路由参数,您可以设置use utf8
路线选择真正的
做出任何。
字符匹配任何utf - 8字符而不是单个字节。
{parameter_name <规定>}
。这个特性使得配置更简洁,但它可以减少路由可读性时需求是复杂的:- 属性
- YAML
- XML
- PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
/ / src /控制器/ BlogController.php名称空间应用程序\控制器;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用ob娱乐下载\组件\HttpFoundation\响应;使用ob娱乐下载\组件\路由\注释\路线;类BlogController扩展AbstractController{#(路线(' /博客/{页< \ d + >}’,名字:“blog_list”))公共函数列表(int美元页面):响应{/ /……}}
字符串$蛞蝓
,添加BlogPost美元后
:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
/ / src /控制器/ BlogController.php名称空间应用程序\控制器;使用应用程序\实体\博客;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用ob娱乐下载\组件\HttpFoundation\响应;使用ob娱乐下载\组件\路由\注释\路线;类BlogController扩展AbstractController{/ /……#(路线(“/博客/{蛞蝓}”,名字:“blog_show”))公共函数显示(博客美元帖子):响应{/ /后美元蛞蝓路由参数相匹配的对象/ /……}}
博客
在这种情况下),“param转换器”使数据库请求找到对象使用请求参数(鼻涕虫
在这种情况下)。如果没有找到对象,Symfony自动生成一个4ob娱乐下载04响应。
-
_controller
-
这个参数是用来确定哪些控制器和执行行动路线相匹配。
-
_format
-
匹配的值用于设置的“请求格式”
请求
对象。这是用于诸如设置内容类型
的响应(如json
格式转换为内容类型
的application / json
)。
-
_fragment
-
用于设置片段标识符,这是可选的最后一个URL的一部分,从一开始
#
性格和用于标识文档的一部分。
-
_locale
-
用于设置语言环境在请求。
(除了可以包含这些属性_fragment
)在个别航线和航线进口。ob娱乐下载Symfony定义一些特殊的属性名称相同的(主要强调除外),这样你就可以定义它们容易些:
- 属性
- YAML
- XML
- PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
/ / src /控制器/ ArticleController.php名称空间应用程序\控制器;/ /……类ArticleController扩展AbstractController{#(路线(路径:' / / {_locale} /搜索文章。{_format}’地区:“en”格式:“html”,要求:“_locale”= >“en | fr”,“_format”= >“html | xml”),)公共函数搜索():响应{}}
_controller
_format
请求
对象。这是用于诸如设置内容类型
的响应(如json
格式转换为内容类型
的application / json
)。_fragment
#
性格和用于标识文档的一部分。_locale
_fragment
)在个别航线和航线进口。ob娱乐下载Symfony定义一些特殊的属性名称相同的(主要强调除外),这样你就可以定义它们容易些:- 属性
- YAML
- XML
- PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
/ / src /控制器/ ArticleController.php名称空间应用程序\控制器;/ /……类ArticleController扩展AbstractController{#(路线(路径:' / / {_locale} /搜索文章。{_format}’地区:“en”格式:“html”,要求:“_locale”= >“en | fr”,“_format”= >“html | xml”),)公共函数搜索():响应{}}
在这个例子中,两个original_route_name
和new_route_name
路线可以用于应用程序和将产生相同的结果。
在这个例子中,每次new_route_name
使用别名,触发一个弃用警告,建议你不要使用别名。
的消息实际上是一个消息模板替换出现的% alias_id %
占位符的别名。你必须至少有一个发生的% alias_id %
在你的模板占位符。
/博客)这就是为什么Symfonob娱乐下载y分享路由配置包括一个功能。
当定义路线作为属性,把常见的配置#(路线)
控制器类的属性。在其他路由格式,定义常见的配置使用导入时选择路线。
- 属性
- 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
/ / src /控制器/ BlogController.php名称空间应用程序\控制器;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用ob娱乐下载\组件\HttpFoundation\响应;使用ob娱乐下载\组件\路由\注释\路线;#(路线(“/博客”,要求:[' _locale ' = > ' en | es | fr '],名字:“blog_”))类BlogController扩展AbstractController{#(路线(“/ {_locale}”,名字:“指数”))公共函数指数():响应{/ /……}#(路线(' / {_locale} /文章/{蛞蝓}’,名字:'显示'))公共函数显示(字符串美元鼻涕虫):响应{/ /……}}
在这个例子中,的路线index ()
行动将被称为blog_index
和它的URL/博客/ {_locale}
。的路线显示()
行动将被称为blog_show
和它的URL/博客/ {_locale} /文章/{蛞蝓}
。两个路线也将验证_locale
类中定义的参数匹配正则表达式注释。
请注意
如果任何前缀路线定义一个空路径,Symfony末尾添加一个斜杠。ob娱乐下载在前面的例子中,一个空路径前缀/博客
将导致/博客/
URL。如果你想避免这种行为,设置trailing_slash_on_root
选项假
(使用PHP时该选项不可用属性或注释):
- YAML
- XML
- PHP
1 2 3 4 5 6 7
#配置/线路/ annotations.yaml控制器:资源:“. . / . . / src /控制器/”类型:注释前缀:“/博客”trailing_slash_on_root:假#……
另请参阅
ob娱乐下载Symfony可以从不同来源进口航线装载机,你甚至可以创建自己的路线。
#(路线)
控制器类的属性。在其他路由格式,定义常见的配置使用导入时选择路线。- 属性
- 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
/ / src /控制器/ BlogController.php名称空间应用程序\控制器;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用ob娱乐下载\组件\HttpFoundation\响应;使用ob娱乐下载\组件\路由\注释\路线;#(路线(“/博客”,要求:[' _locale ' = > ' en | es | fr '],名字:“blog_”))类BlogController扩展AbstractController{#(路线(“/ {_locale}”,名字:“指数”))公共函数指数():响应{/ /……}#(路线(' / {_locale} /文章/{蛞蝓}’,名字:'显示'))公共函数显示(字符串美元鼻涕虫):响应{/ /……}}
index ()
行动将被称为blog_index
和它的URL/博客/ {_locale}
。的路线显示()
行动将被称为blog_show
和它的URL/博客/ {_locale} /文章/{蛞蝓}
。两个路线也将验证_locale
类中定义的参数匹配正则表达式注释。请注意
如果任何前缀路线定义一个空路径,Symfony末尾添加一个斜杠。ob娱乐下载在前面的例子中,一个空路径前缀/博客
将导致/博客/
URL。如果你想避免这种行为,设置trailing_slash_on_root
选项假
(使用PHP时该选项不可用属性或注释):
- YAML
- XML
- PHP
1 2 3 4 5 6 7
#配置/线路/ annotations.yaml控制器:资源:“. . / . . / src /控制器/”类型:注释前缀:“/博客”trailing_slash_on_root:假#……
另请参阅
ob娱乐下载Symfony可以从不同来源进口航线装载机,你甚至可以创建自己的路线。
请求Symfony创建的对象存储的所有路ob娱乐下载由配置(如名称和参数)的“请求属性”。你可以得到这个信息在控制器通过请求
对象:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
/ / src /控制器/ BlogController.php名称空间应用程序\控制器;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用ob娱乐下载\组件\HttpFoundation\请求;使用ob娱乐下载\组件\HttpFoundation\响应;使用ob娱乐下载\组件\路由\注释\路线;类BlogController扩展AbstractController{#(路线(“/博客”,名字:“blog_list”))公共函数列表(请求美元请求):响应{美元routeName=美元请求- >属性- >get (“_route”);美元routeParameters=美元请求- >属性- >get (“_route_params”);/ /使用这个来获得所有可用的属性(不仅路由的):美元allAttributes=美元请求- >属性- >所有();/ /……}}
你可以得到这个信息在服务注入request_stack
服务在一个服务请求对象。在模板,使用树枝全局应用程序变量获取当前路线及其属性:
1 2
{%集route_name = app.current_route %}{%集route_parameters = app.current_route_parameters %}
6.2
的app.current_route
和app.current_route_parameters
Symfony 6.2中引入的变量。ob娱乐下载之前你必须访问_route
和_route_params
请求属性使用app.request.attributes.get ()
。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
/ / src /控制器/ BlogController.php名称空间应用程序\控制器;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用ob娱乐下载\组件\HttpFoundation\请求;使用ob娱乐下载\组件\HttpFoundation\响应;使用ob娱乐下载\组件\路由\注释\路线;类BlogController扩展AbstractController{#(路线(“/博客”,名字:“blog_list”))公共函数列表(请求美元请求):响应{美元routeName=美元请求- >属性- >get (“_route”);美元routeParameters=美元请求- >属性- >get (“_route_params”);/ /使用这个来获得所有可用的属性(不仅路由的):美元allAttributes=美元请求- >属性- >所有();/ /……}}
request_stack
服务在一个服务请求对象。在模板,使用树枝全局应用程序变量获取当前路线及其属性:1 2
{%集route_name = app.current_route %}{%集route_parameters = app.current_route_parameters %}
6.2
的app.current_route
和app.current_route_parameters
Symfony 6.2中引入的变量。ob娱乐下载之前你必须访问_route
和_route_params
请求属性使用app.request.attributes.get ()
。
RedirectController重定向到其他路线,网址:
- 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日27
#配置/ routes.yamldoc_shortcut:路径:/医生控制器:ob娱乐下载Symfony \包\ FrameworkBundle \ \ RedirectController控制器默认值:路线:“doc_page”#选择您可以定义一些参数传递到路线页面:“指数”版本:“当前”#重定向是暂时默认(代码302),但是你可以让他们永久(代码301)永久的:真正的#添加这个重定向时保持原来的查询字符串参数keepQueryParams:真正的#添加这个重定向时保持HTTP方法。重定向的状态变化# *临时重定向,它使用了307状态码,而不是302# *永久重定向,它使用了308状态码,而不是301keepRequestMethod:真正的#添加这个重定向时删除原来的路线属性ignoreAttributes:真正的legacy_doc:路径:/遗留/医生控制器:ob娱乐下载Symfony \包\ FrameworkBundle \ \ RedirectController控制器默认值:#这个值可以是绝对路径或绝对URL路径:“https://legacy.example.com/doc”永久的:真正的
提示
ob娱乐下载Symfony还提供了一些实用程序重定向内部控制器
- 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日27
#配置/ routes.yamldoc_shortcut:路径:/医生控制器:ob娱乐下载Symfony \包\ FrameworkBundle \ \ RedirectController控制器默认值:路线:“doc_page”#选择您可以定义一些参数传递到路线页面:“指数”版本:“当前”#重定向是暂时默认(代码302),但是你可以让他们永久(代码301)永久的:真正的#添加这个重定向时保持原来的查询字符串参数keepQueryParams:真正的#添加这个重定向时保持HTTP方法。重定向的状态变化# *临时重定向,它使用了307状态码,而不是302# *永久重定向,它使用了308状态码,而不是301keepRequestMethod:真正的#添加这个重定向时删除原来的路线属性ignoreAttributes:真正的legacy_doc:路径:/遗留/医生控制器:ob娱乐下载Symfony \包\ FrameworkBundle \ \ RedirectController控制器默认值:#这个值可以是绝对路径或绝对URL路径:“https://legacy.example.com/doc”永久的:真正的
提示
ob娱乐下载Symfony还提供了一些实用程序重定向内部控制器
主机选择要求传入请求的HTTP主机匹配特定值。在接下来的例子中,两个路线匹配相同的路径(/
),但其中一个只对特定的主机名:
- 属性
- YAML
- XML
- PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
/ / src /控制器/ MainController.php名称空间应用程序\控制器;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用ob娱乐下载\组件\HttpFoundation\响应;使用ob娱乐下载\组件\路由\注释\路线;类MainController扩展AbstractController{#(路线(“/”,名字:“mobile_homepage”,主持人:“m.example.com”))公共函数mobileHomepage():响应{/ /……}#(路线(“/”,名字:“主页”))公共函数主页():响应{/ /……}}
的值主机
选项包括参数(这是有用的在多租户应用程序),这些参数也可以验证需求
:
- 属性
- 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日27
/ / src /控制器/ MainController.php名称空间应用程序\控制器;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用ob娱乐下载\组件\HttpFoundation\响应;使用ob娱乐下载\组件\路由\注释\路线;类MainController扩展AbstractController{#(路线(' / '名称:“mobile_homepage”主机:“.example.com{子域名}”默认值:[“子域名”= >“米”),要求:“子域名”= >“m |移动”),)公共函数mobileHomepage():响应{/ /……}#(路线(“/”,名字:“主页”))公共函数主页():响应{/ /……}}
在上面的例子中,子域名
参数定义了一个默认值,否则您需要包含子域值每次生成一个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
- 属性
- YAML
- XML
- PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
/ / src /控制器/ MainController.php名称空间应用程序\控制器;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用ob娱乐下载\组件\HttpFoundation\响应;使用ob娱乐下载\组件\路由\注释\路线;类MainController扩展AbstractController{#(路线(“/”,名字:“mobile_homepage”,主持人:“m.example.com”))公共函数mobileHomepage():响应{/ /……}#(路线(“/”,名字:“主页”))公共函数主页():响应{/ /……}}
主机
选项包括参数(这是有用的在多租户应用程序),这些参数也可以验证需求
:- 属性
- 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日27
/ / src /控制器/ MainController.php名称空间应用程序\控制器;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用ob娱乐下载\组件\HttpFoundation\响应;使用ob娱乐下载\组件\路由\注释\路线;类MainController扩展AbstractController{#(路线(' / '名称:“mobile_homepage”主机:“.example.com{子域名}”默认值:[“子域名”= >“米”),要求:“子域名”= >“m |移动”),)公共函数mobileHomepage():响应{/ /……}#(路线(“/”,名字:“主页”))公共函数主页():响应{/ /……}}
子域名
参数定义了一个默认值,否则您需要包含子域值每次生成一个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
翻译语言环境。这样就避免了需要复制路线,也减少了潜在的缺陷:
- 属性
- YAML
- XML
- PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
/ / src /控制器/ CompanyController.php名称空间应用程序\控制器;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用ob娱乐下载\组件\HttpFoundation\响应;使用ob娱乐下载\组件\路由\注释\路线;类CompanyController扩展AbstractController{#(路径(路径:“en”= >' /关于我们',“问”= >' / over-ons ')名称:“about_us”)]公共函数关于():响应{/ /……}}
请注意
使用PHP属性本地化的路线时,你必须使用路径
命名参数来指定数组的路径。
- 属性
- YAML
- XML
- PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
/ / src /控制器/ CompanyController.php名称空间应用程序\控制器;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用ob娱乐下载\组件\HttpFoundation\响应;使用ob娱乐下载\组件\路由\注释\路线;类CompanyController扩展AbstractController{#(路径(路径:“en”= >' /关于我们',“问”= >' / over-ons ')名称:“about_us”)]公共函数关于():响应{/ /……}}
请注意
使用PHP属性本地化的路线时,你必须使用路径
命名参数来指定数组的路径。
当局部路由匹配,Symfony自动使用相同的语言环境在整个请求。ob娱乐下载
提示
当应用程序使用完整的“语言+领土”地区(如。fr_FR
,fr_BE
),如果所有相关的url是相同的地区,路线只能使用语言的部分(如。fr
),以避免重复相同的url。
国际化了的应用程序的一个常见需求是前缀与一个地区所有航线。可以通过定义一个不同的前缀为每个地区(和设置一个空前缀为默认语言环境如果你喜欢它):
- YAML
- XML
- PHP
1 2 3 4 5 6 7
#配置/线路/ annotations.yaml控制器:资源:“. . / . . / src /控制器/”类型:注释前缀:en:”#不要url前缀(英文),默认语言环境问:' /问'
另一个常见需求是主机上的网站根据地区不同的域。可以通过定义为每个地区不同的主机。
- YAML
- XML
- PHP
1 2 3 4 5 6 7
#配置/线路/ annotations.yaml控制器:资源:“. . / . . / src /控制器/”类型:注释主持人:en:“https://www.example.com”问:“https://www.example.nl”
HTTP缓存。
路线可以配置一个无状态的
布尔选项来宣布会议时不应该使用匹配请求:
- 属性
- YAML
- XML
- PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14
/ / src /控制器/ MainController.php名称空间应用程序\控制器;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用ob娱乐下载\组件\路由\注释\路线;类MainController扩展AbstractController{#(路线(“/”,名字:“主页”,无状态:true))公共函数主页():响应{/ /……}}
现在,如果使用会话,应用程序将根据您的报告kernel.debug
参数:
启用
:将抛出一个UnexpectedSessionUsageException异常禁用
:将记录一个警告
它将帮助你理解和希望解决意想不到的应用程序行为。
< a href = "…" >值手动在HTML模板。同样,如果URL的一些路线的变化,你只需要更新路由配置和所有的链接将被更新。
生成一个URL,您需要指定路线的名称(如。blog_show
)和参数的值(如定义的路线。蛞蝓=我的博客帖子
)。
因此每个路线有一个应用程序中内部名称必须是唯一的。如果你不设置明确的路线名称的名字
选项,Symfoob娱乐下载ny会生成一个自动的名字基于控制器和动作。
AbstractController,可以使用generateUrl ()
助手:
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日27 28 29 30 31 32
/ / src /控制器/ BlogController.php名称空间应用程序\控制器;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用ob娱乐下载\组件\HttpFoundation\响应;使用ob娱乐下载\组件\路由\注释\路线;使用ob娱乐下载\组件\路由\发电机\UrlGeneratorInterface;类BlogController扩展AbstractController{#(路线(“/博客”,名字:“blog_list”))公共函数列表():响应{/ /生成一个URL参数没有途径美元signUpPage=美元这- >generateUrl (“sign_up”);/ /生成一个URL路由参数美元userProfilePage=美元这- >generateUrl (“user_profile”,(“用户名”= >美元用户- >getUserIdentifier ()));/ /默认生成的url是“绝对路径”。通过第三个选/ /参数产生不同的URL(例如,一个“绝对URL”)美元signUpPage=美元这- >generateUrl (“sign_up”,UrlGeneratorInterface []::ABSOLUTE_URL);/ /本地化路线时,Symfony使用默认当前请求的地区ob娱乐下载/ /传递不同的“_locale”值如果你想显式地设置语言环境美元signUpPageInDutch=美元这- >generateUrl (“sign_up”,(“_locale”= >“问”]);/ /……}}
请注意
如果你通过generateUrl ()
方法有些参数不是路由定义的一部分,它们包括在生成的URL查询字符串:
1 2 3
美元这- >generateUrl (“博客”,(“页面”= >2,“类别”= >Sob娱乐下载ymfony的]);/ /“博客”路线只定义了页面的参数;生成的URL是:/ / /博客/ 2 ?类别= Symfob娱乐下载ony
谨慎
而对象转换为字符串用作占位符时,他们不使用时作为额外参数转换。所以,如果你传递一个对象(例如,一个Uuid)作为一个额外的参数的值,您需要显式地将它转换成一个字符串:
1
美元这- >generateUrl (“博客”,(“uuid”= >(字符串)美元实体- >getUuid ()));
如果你的控制器不延长AbstractController
,你需要在你的控制器获取服务并遵循的指示下一节。
路由器ob娱乐下载Symfony服务到您自己的服务,并使用它生成()
方法。当使用服务自动装配你只需要添加一个参数在服务构造函数和type-hint它UrlGeneratorInterface类:
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日27 28 29 30 31 32
/ / src /服务/ SomeService.php名称空间应用程序\服务;使用ob娱乐下载\组件\路由\发电机\UrlGeneratorInterface;类SomeService{公共函数__construct(私人UrlGeneratorInterface美元路由器){}公共函数someMethod(){/ /……/ /生成一个URL参数没有途径美元signUpPage=美元这- >路由器- >生成(“sign_up”);/ /生成一个URL路由参数美元userProfilePage=美元这- >路由器- >生成(“user_profile”,(“用户名”= >美元用户- >getUserIdentifier ()));/ /默认生成的url是“绝对路径”。通过第三个选/ /参数产生不同的URL(例如,一个“绝对URL”)美元signUpPage=美元这- >路由器- >生成(“sign_up”,UrlGeneratorInterface []::ABSOLUTE_URL);/ /本地化路线时,Symfony使用默认当前请求的地区ob娱乐下载/ /传递不同的“_locale”值如果你想显式地设置语言环境美元signUpPageInDutch=美元这- >路由器- >生成(“sign_up”,(“_locale”= >“问”]);}}
创建页面之间的链接在主篇关于Symfony模板。ob娱乐下载
路径()和url ()
树枝函数生成的url并将它们存储在JavaScript变量。的escape ()
需要逃避任何non-JavaScript-safe值过滤:
1 2 3
<脚本>常量路线=”{{路径(blog_show,{蛞蝓:'我的博客帖子'})|逃避(js)}}”;< /脚本>
如果你需要生成动态url或者如果您使用的是纯JavaScript代码,这个解决方案是行不通的。在这些情况下,可以考虑使用FOSJsRoutingBundle。
服务生成的url。唯一的区别在于,命令不执行HTTP上下文。因此,如果你产生绝对url,你会得到http://localhost/
的主机名,而不是你真正的主机名。
解决方案是配置default_uri
选项来定义所使用的“请求上下文”命令生成的url时:
- YAML
- XML
- PHP
1 2 3 4 5
#配置/包/ routing.yaml框架:路由器:#……default_uri:“https://example.org/my/path/”
现在你会得到预期的结果生成url时在你的命令:
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日27 28 29 30 31 32 33 34 35 36 37 38
/ / src /命令/ SomeCommand.php名称空间应用程序\命令;使用ob娱乐下载\组件\控制台\命令\命令;使用ob娱乐下载\组件\控制台\输入\InputInterface;使用ob娱乐下载\组件\控制台\输出\OutputInterface;使用ob娱乐下载\组件\路由\发电机\UrlGeneratorInterface;使用ob娱乐下载\组件\路由\RouterInterface;/ /……类SomeCommand扩展命令{公共函数__construct(私人RouterInterface美元路由器){父::__construct ();}受保护的函数执行(InputInterface美元输入,OutputInterface美元输出):int{/ /生成一个URL参数没有途径美元signUpPage=美元这- >路由器- >生成(“sign_up”);/ /生成一个URL路由参数美元userProfilePage=美元这- >路由器- >生成(“user_profile”,(“用户名”= >美元用户- >getUserIdentifier ()));/ /默认生成的url是“绝对路径”。通过第三个选/ /参数产生不同的URL(例如,一个“绝对URL”)美元signUpPage=美元这- >路由器- >生成(“sign_up”,UrlGeneratorInterface []::ABSOLUTE_URL);/ /本地化路线时,Symfony使用默认当前请求的地区ob娱乐下载/ /传递不同的“_locale”值如果你想显式地设置语言环境美元signUpPageInDutch=美元这- >路由器- >生成(“sign_up”,(“_locale”= >“问”]);/ /……}}
请注意
默认情况下,使用相同的url生成的网络资产default_uri
值,但是你可以改变它asset.request_context.base_path
和asset.request_context.secure
容器参数。
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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
/ / src /控制器/ SecurityController.php名称空间应用程序\控制器;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用ob娱乐下载\组件\HttpFoundation\响应;使用ob娱乐下载\组件\路由\注释\路线;类SecurityController扩展AbstractController{#(路线(“/登录”,名字:“登录”,计划:[“https”]))公共函数登录():响应{/ /……}}
生成的URL登录
总是使用HTTPS。这意味着,当使用路径()
树枝函数生成URL,你可能会得到一个绝对URL,而不是相对URL,如果原始请求的HTTP方案不同于计划使用的路线:
1 2 3 4 5 6
{#如果当前方案HTTPS,生成一个相对URL: /登录#}{{路径(“登录”)}}{#如果当前的计划是HTTP,生成一个绝对URL更改方案:https://example.com/login}{{路径(“登录”)}}
该计划要求也执行传入的请求。如果你试图访问/登录
与HTTP URL,您将自动重定向到相同的URL,但随着HTTPS方案。
如果你想强迫一群航线使用HTTPS,您可以定义导入时的默认方案。下面的例子部队HTTPS所有航线上定义为注释:
- YAML
- XML
- PHP
1 2 3 4 5 6
#配置/线路/ annotations.yaml控制器:资源:“. . / . . / src /控制器/”类型:注释默认值:计划:(https)
请注意
安全组件提供另一种方式执行HTTP或HTTPS通过requires_channel
设置。
blog_show
)和参数的值(如定义的路线。蛞蝓=我的博客帖子
)。的名字
选项,Symfoob娱乐下载ny会生成一个自动的名字基于控制器和动作。AbstractController,可以使用generateUrl ()
助手:
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日27 28 29 30 31 32
/ / src /控制器/ BlogController.php名称空间应用程序\控制器;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用ob娱乐下载\组件\HttpFoundation\响应;使用ob娱乐下载\组件\路由\注释\路线;使用ob娱乐下载\组件\路由\发电机\UrlGeneratorInterface;类BlogController扩展AbstractController{#(路线(“/博客”,名字:“blog_list”))公共函数列表():响应{/ /生成一个URL参数没有途径美元signUpPage=美元这- >generateUrl (“sign_up”);/ /生成一个URL路由参数美元userProfilePage=美元这- >generateUrl (“user_profile”,(“用户名”= >美元用户- >getUserIdentifier ()));/ /默认生成的url是“绝对路径”。通过第三个选/ /参数产生不同的URL(例如,一个“绝对URL”)美元signUpPage=美元这- >generateUrl (“sign_up”,UrlGeneratorInterface []::ABSOLUTE_URL);/ /本地化路线时,Symfony使用默认当前请求的地区ob娱乐下载/ /传递不同的“_locale”值如果你想显式地设置语言环境美元signUpPageInDutch=美元这- >generateUrl (“sign_up”,(“_locale”= >“问”]);/ /……}}
请注意
如果你通过generateUrl ()
方法有些参数不是路由定义的一部分,它们包括在生成的URL查询字符串:
1 2 3
美元这- >generateUrl (“博客”,(“页面”= >2,“类别”= >Sob娱乐下载ymfony的]);/ /“博客”路线只定义了页面的参数;生成的URL是:/ / /博客/ 2 ?类别= Symfob娱乐下载ony
谨慎
而对象转换为字符串用作占位符时,他们不使用时作为额外参数转换。所以,如果你传递一个对象(例如,一个Uuid)作为一个额外的参数的值,您需要显式地将它转换成一个字符串:
1
美元这- >generateUrl (“博客”,(“uuid”= >(字符串)美元实体- >getUuid ()));
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日27 28 29 30 31 32
/ / src /控制器/ BlogController.php名称空间应用程序\控制器;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用ob娱乐下载\组件\HttpFoundation\响应;使用ob娱乐下载\组件\路由\注释\路线;使用ob娱乐下载\组件\路由\发电机\UrlGeneratorInterface;类BlogController扩展AbstractController{#(路线(“/博客”,名字:“blog_list”))公共函数列表():响应{/ /生成一个URL参数没有途径美元signUpPage=美元这- >generateUrl (“sign_up”);/ /生成一个URL路由参数美元userProfilePage=美元这- >generateUrl (“user_profile”,(“用户名”= >美元用户- >getUserIdentifier ()));/ /默认生成的url是“绝对路径”。通过第三个选/ /参数产生不同的URL(例如,一个“绝对URL”)美元signUpPage=美元这- >generateUrl (“sign_up”,UrlGeneratorInterface []::ABSOLUTE_URL);/ /本地化路线时,Symfony使用默认当前请求的地区ob娱乐下载/ /传递不同的“_locale”值如果你想显式地设置语言环境美元signUpPageInDutch=美元这- >generateUrl (“sign_up”,(“_locale”= >“问”]);/ /……}}
请注意
如果你通过generateUrl ()
方法有些参数不是路由定义的一部分,它们包括在生成的URL查询字符串:
1 2 3
美元这- >generateUrl (“博客”,(“页面”= >2,“类别”= >Sob娱乐下载ymfony的]);/ /“博客”路线只定义了页面的参数;生成的URL是:/ / /博客/ 2 ?类别= Symfob娱乐下载ony
谨慎
而对象转换为字符串用作占位符时,他们不使用时作为额外参数转换。所以,如果你传递一个对象(例如,一个Uuid)作为一个额外的参数的值,您需要显式地将它转换成一个字符串:
1
美元这- >generateUrl (“博客”,(“uuid”= >(字符串)美元实体- >getUuid ()));
如果你的控制器不延长AbstractController
,你需要在你的控制器获取服务并遵循的指示下一节。
路由器ob娱乐下载Symfony服务到您自己的服务,并使用它生成()
方法。当使用服务自动装配你只需要添加一个参数在服务构造函数和type-hint它UrlGeneratorInterface类:
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日27 28 29 30 31 32
/ / src /服务/ SomeService.php名称空间应用程序\服务;使用ob娱乐下载\组件\路由\发电机\UrlGeneratorInterface;类SomeService{公共函数__construct(私人UrlGeneratorInterface美元路由器){}公共函数someMethod(){/ /……/ /生成一个URL参数没有途径美元signUpPage=美元这- >路由器- >生成(“sign_up”);/ /生成一个URL路由参数美元userProfilePage=美元这- >路由器- >生成(“user_profile”,(“用户名”= >美元用户- >getUserIdentifier ()));/ /默认生成的url是“绝对路径”。通过第三个选/ /参数产生不同的URL(例如,一个“绝对URL”)美元signUpPage=美元这- >路由器- >生成(“sign_up”,UrlGeneratorInterface []::ABSOLUTE_URL);/ /本地化路线时,Symfony使用默认当前请求的地区ob娱乐下载/ /传递不同的“_locale”值如果你想显式地设置语言环境美元signUpPageInDutch=美元这- >路由器- >生成(“sign_up”,(“_locale”= >“问”]);}}
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日27 28 29 30 31 32
/ / src /服务/ SomeService.php名称空间应用程序\服务;使用ob娱乐下载\组件\路由\发电机\UrlGeneratorInterface;类SomeService{公共函数__construct(私人UrlGeneratorInterface美元路由器){}公共函数someMethod(){/ /……/ /生成一个URL参数没有途径美元signUpPage=美元这- >路由器- >生成(“sign_up”);/ /生成一个URL路由参数美元userProfilePage=美元这- >路由器- >生成(“user_profile”,(“用户名”= >美元用户- >getUserIdentifier ()));/ /默认生成的url是“绝对路径”。通过第三个选/ /参数产生不同的URL(例如,一个“绝对URL”)美元signUpPage=美元这- >路由器- >生成(“sign_up”,UrlGeneratorInterface []::ABSOLUTE_URL);/ /本地化路线时,Symfony使用默认当前请求的地区ob娱乐下载/ /传递不同的“_locale”值如果你想显式地设置语言环境美元signUpPageInDutch=美元这- >路由器- >生成(“sign_up”,(“_locale”= >“问”]);}}
创建页面之间的链接在主篇关于Symfony模板。ob娱乐下载
路径()和url ()
树枝函数生成的url并将它们存储在JavaScript变量。的escape ()
需要逃避任何non-JavaScript-safe值过滤:
1 2 3
<脚本>常量路线=”{{路径(blog_show,{蛞蝓:'我的博客帖子'})|逃避(js)}}”;< /脚本>
如果你需要生成动态url或者如果您使用的是纯JavaScript代码,这个解决方案是行不通的。在这些情况下,可以考虑使用FOSJsRoutingBundle。
1 2 3
<脚本>常量路线=”{{路径(blog_show,{蛞蝓:'我的博客帖子'})|逃避(js)}}”;< /脚本>
服务生成的url。唯一的区别在于,命令不执行HTTP上下文。因此,如果你产生绝对url,你会得到http://localhost/
的主机名,而不是你真正的主机名。
解决方案是配置default_uri
选项来定义所使用的“请求上下文”命令生成的url时:
- YAML
- XML
- PHP
1 2 3 4 5
#配置/包/ routing.yaml框架:路由器:#……default_uri:“https://example.org/my/path/”
现在你会得到预期的结果生成url时在你的命令:
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日27 28 29 30 31 32 33 34 35 36 37 38
/ / src /命令/ SomeCommand.php名称空间应用程序\命令;使用ob娱乐下载\组件\控制台\命令\命令;使用ob娱乐下载\组件\控制台\输入\InputInterface;使用ob娱乐下载\组件\控制台\输出\OutputInterface;使用ob娱乐下载\组件\路由\发电机\UrlGeneratorInterface;使用ob娱乐下载\组件\路由\RouterInterface;/ /……类SomeCommand扩展命令{公共函数__construct(私人RouterInterface美元路由器){父::__construct ();}受保护的函数执行(InputInterface美元输入,OutputInterface美元输出):int{/ /生成一个URL参数没有途径美元signUpPage=美元这- >路由器- >生成(“sign_up”);/ /生成一个URL路由参数美元userProfilePage=美元这- >路由器- >生成(“user_profile”,(“用户名”= >美元用户- >getUserIdentifier ()));/ /默认生成的url是“绝对路径”。通过第三个选/ /参数产生不同的URL(例如,一个“绝对URL”)美元signUpPage=美元这- >路由器- >生成(“sign_up”,UrlGeneratorInterface []::ABSOLUTE_URL);/ /本地化路线时,Symfony使用默认当前请求的地区ob娱乐下载/ /传递不同的“_locale”值如果你想显式地设置语言环境美元signUpPageInDutch=美元这- >路由器- >生成(“sign_up”,(“_locale”= >“问”]);/ /……}}
请注意
默认情况下,使用相同的url生成的网络资产default_uri
值,但是你可以改变它asset.request_context.base_path
和asset.request_context.secure
容器参数。
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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
/ / src /控制器/ SecurityController.php名称空间应用程序\控制器;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用ob娱乐下载\组件\HttpFoundation\响应;使用ob娱乐下载\组件\路由\注释\路线;类SecurityController扩展AbstractController{#(路线(“/登录”,名字:“登录”,计划:[“https”]))公共函数登录():响应{/ /……}}
生成的URL登录
总是使用HTTPS。这意味着,当使用路径()
树枝函数生成URL,你可能会得到一个绝对URL,而不是相对URL,如果原始请求的HTTP方案不同于计划使用的路线:
1 2 3 4 5 6
{#如果当前方案HTTPS,生成一个相对URL: /登录#}{{路径(“登录”)}}{#如果当前的计划是HTTP,生成一个绝对URL更改方案:https://example.com/login}{{路径(“登录”)}}
该计划要求也执行传入的请求。如果你试图访问/登录
与HTTP URL,您将自动重定向到相同的URL,但随着HTTPS方案。
如果你想强迫一群航线使用HTTPS,您可以定义导入时的默认方案。下面的例子部队HTTPS所有航线上定义为注释:
- YAML
- XML
- PHP
1 2 3 4 5 6
#配置/线路/ annotations.yaml控制器:资源:“. . / . . / src /控制器/”类型:注释默认值:计划:(https)
请注意
安全组件提供另一种方式执行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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
/ / src /控制器/ SecurityController.php名称空间应用程序\控制器;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用ob娱乐下载\组件\HttpFoundation\响应;使用ob娱乐下载\组件\路由\注释\路线;类SecurityController扩展AbstractController{#(路线(“/登录”,名字:“登录”,计划:[“https”]))公共函数登录():响应{/ /……}}
登录
总是使用HTTPS。这意味着,当使用路径()
树枝函数生成URL,你可能会得到一个绝对URL,而不是相对URL,如果原始请求的HTTP方案不同于计划使用的路线:1 2 3 4 5 6
{#如果当前方案HTTPS,生成一个相对URL: /登录#}{{路径(“登录”)}}{#如果当前的计划是HTTP,生成一个绝对URL更改方案:https://example.com/login}{{路径(“登录”)}}
/登录
与HTTP URL,您将自动重定向到相同的URL,但随着HTTPS方案。- YAML
- XML
- PHP
1 2 3 4 5 6
#配置/线路/ annotations.yaml控制器:资源:“. . / . . / src /控制器/”类型:注释默认值:计划:(https)
请注意
安全组件提供另一种方式执行HTTP或HTTPS通过requires_channel
设置。