Symfonyob娱乐下载 5.2新增功能:控制器参数属性
2020年10月8日·发表的哈维尔Eguiluz
警告:这篇文章是关于一个不受支持的Symfony版本。ob娱乐下载有些信息可能已经过时了。阅读最新的Symfony文档ob娱乐下载.
提供的
杰罗姆Vasseur
在# 37829.
PHP 8将在几周后发布,它将包括一个改变游戏规则的特性,称为属性(或注释)。ob娱乐下载Symfony 5.2已经包含了属性定义路由和所需的依赖关系,但是我们继续在有意义的地方添加属性支持。
这就是为什么在Symfonyob娱乐下载 5.2中你也可以使用PHP属性作为控制器参数.多亏了这个新功能,我们引入了一个# (CurrentUser)
属性将控制器参数转换为表示当前登录用户的对象:
12 3 4 5 6 7 8 9 10 11 12 13 14
/ / src /控制器/ SomeController.php名称空间应用程序\控制器;使用应用程序\实体\MyUser;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用ob娱乐下载\组件\安全\Http\属性\CurrentUser;类SomeController扩展AbstractController{公共函数指数(# CurrentUser MyUser$用户){/ /……}}
在实践中,这是通过向ArgumentMetadata
对象传递给参数值解析器.方法定义了自己的解析器,现在可以使用getAttribute ()
方法,该方法返回在参数(或零
如果没有设置)。
发表在#生活在边缘
评论
皮埃尔Breteche
2020年10月8日说在北京时间
这是为了从FrameworkExtra中替换ParamConverter和其他控制器参数的相关注释吗?
目前,参数解析器只告诉你参数的基本属性:数据类型、默认值、是否可空、是否可变等等。
多亏了属性,您还可以将“配置选项”传递给这些参数。例如,你可以创建“#[Autowire]”属性来定义你自己的自动装配机制,或者你可以定义“#[SomeAttribute(SomeClass::class, Some_CONSTANT, 24 * 3600)]”来计算表达式和常量,并将它们传递给解析器。
多亏了属性,您还可以将“配置选项”传递给这些参数。例如,你可以创建“#[Autowire]”属性来定义你自己的自动装配机制,或者你可以定义“#[SomeAttribute(SomeClass::class, Some_CONSTANT, 24 * 3600)]”来计算表达式和常量,并将它们传递给解析器。
Petru Szemereczki
2020年10月8日说在37
@Massimiliano由于属性是一种语言特性,属性的处理是由PHP解释器中的C语言完成的,在用户定义的空间(PHP)中几乎没有额外的处理,因此可能有性能提高、灵活性和更少的代码等多种好处。
@Stefan属性的语法从最初的提议改变了几次。这是选择最终语法的最后一次投票:https://wiki.php.net/rfc/shorter_attribute_syntax
Javier Eguiluz is a certified Symfony engineer.
Get certified! Online exams available in all countries.
Register Now