新在Symfoob娱乐下载ny 4.3:自动验证
2019年4月2日·发表的哈维尔Eguiluz
警告:这篇文章是关于一个不受支持的Symfony的版本。ob娱乐下载其中一些信息可能是过时了。阅读最近的Symfony文档ob娱乐下载。
考虑以下简单的实体学说:
1 2 3 4 5 6 7 8 9 10
使用学说\ORM\映射作为ORM;/ * *@ORM实体\ * /类SomeEntity{/ /……/ * *@ORM\列(长度= 4)* /公共美元pinCode;}
下面的代码会导致验证错误?
1 2 3
美元实体=新SomeEntity ();美元实体- >pinCode =“1234567890”;美元violationList=美元验证器- >validate (美元实体);
答案是…没有。令人惊讶的是,许多Symfony开发人ob娱乐下载员仍然没有意识到原则映射配置(如。@ORM \列(长度= 4)
)实际上并不验证任何东西。这个配置只是一个提示的教条模式发生器。这可能导致可用性和安全问题。
在Syob娱乐下载mfony 4.3我们改善这个通过引入自动验证基于原则的映射。这就是为什么在Symfonyob娱乐下载 4.3中,前面的示例会产生以下结果:
1 2 3 4 5 6
美元violationList=美元验证器- >validate (美元实体);var_dump((字符串)美元violationList);/ /对象(应用程序实体\ \ SomeEntity) .columnLength: \ n/ /这个值是太长了。它应该有4个字符或更少。/ /(代码d94b19cc - 114 f - 4 - f44 9 cc4 - 4138 e80a87b9) \ n
这个新特性映射自查@ORM \列(长度= 4)
添加相关的@Assert \长度(max = 4)
自动验证同样的属性。具体来说,以下验证自动化:
教义的映射 | 自动验证约束 |
---|---|
nullable = false |
@Assert \ NotNull |
类型=… |
@Assert \类型(…) |
独特= true |
@UniqueEntity |
长度=… |
@Assert \长度(…) |
的自动验证nullable = false
和类型=…
需要有PropertyInfo组件安装。同样,默认这个新功能将被禁用,但支持新项目。
自表单组件以及API的平台在内部使用验证器组件,所有的表单和web api也将自动从这些自动约束中获益。
最后,请记住,虽然这自动验证方便,对于大多数应用程序来说是不够的,所以你仍然需要手工配置ob娱乐下载Symfony验证约束。
发表在#生活在边缘
评论
Herve帕特里克Dohou
说在4月2日,2019年在“
非常聪明,不错的工作
丹尼斯Fridrich
说在4月2日,2019年在32
ob娱乐下载Symfony 4.3是真的太棒了!
Bastien Gatellier
说在4月2日,2019年在12:57
很好,谢谢!
@Tito选择启用/禁用这个功能还没有准备好。见https://github.com/doctrine/DoctrineBundle/pull/939时我们会更新博客这是准备好了。
Eric BATARSON
于2019年4月3日表示在05:13
很棒的功能!不错,谢谢
Jochen Taeschner
说在4月10日,2019年在十一27
常见的情况看起来不错。
但是…这是如何处理自定义字段类型扩展基本字段类型?不是我想这样做,但如果我将延长一个int类型存储的东西和phpvalue DateTime。或者我有一些对象(php)映射到一些字符串与已知的最大长度(db) ?我可以有一个长度属性的定义,但价值可能是一个对象。生命周期处理程序之前/之后运行验证吗?这个“神奇”的验证可以启用/禁用全球?如果数据库字段不为空(- > NotBlank ?),但自定义类型的映射将确保它不是零?或生命周期处理程序确保这一点吗?
我看到这么多边界情况……和有感觉最好明确国家学说注释不验证约束(这似乎有点明显…)。
但是…这是如何处理自定义字段类型扩展基本字段类型?不是我想这样做,但如果我将延长一个int类型存储的东西和phpvalue DateTime。或者我有一些对象(php)映射到一些字符串与已知的最大长度(db) ?我可以有一个长度属性的定义,但价值可能是一个对象。生命周期处理程序之前/之后运行验证吗?这个“神奇”的验证可以启用/禁用全球?如果数据库字段不为空(- > NotBlank ?),但自定义类型的映射将确保它不是零?或生命周期处理程序确保这一点吗?
我看到这么多边界情况……和有感觉最好明确国家学说注释不验证约束(这似乎有点明显…)。
旧金山何塞·克鲁斯·罗马诺
说5月13日,2019年在10:51
每一个点同意Jochen Taeschner。我做的这个特性时间前Symfony 3,但我必须回滚该事务,因为ob娱乐下载我面临许多问题,其中包括Jochen上面说。最后,我决定创建一个验证器命令来检查原则对实体字段元数据和检查是否有相应的验证约束,这样我就可以避免这个问题在必要的时候,我可以注释时没有必要(为什么)。直升机从Jochen所说,我面临这些问题:
——多步骤的形式:并不是所有的字段所示表单。例子:当字段在下一步中不可见,如果他们需要……它会抛出一个验证错误因为实体nullable = false字段没有值吗?
——验证组呢?它只会影响违约,或任何验证组?
——也与维护\ NotNull nullable = false。Jochen说过,我不得不使用NotBlank开关。现在看来这个特性将使用断言\ NotNull。你要改变NotNull行为不允许空字符串,或教义会在数据库中存储空什么时候收到空字符串?
——多步骤的形式:并不是所有的字段所示表单。例子:当字段在下一步中不可见,如果他们需要……它会抛出一个验证错误因为实体nullable = false字段没有值吗?
——验证组呢?它只会影响违约,或任何验证组?
——也与维护\ NotNull nullable = false。Jochen说过,我不得不使用NotBlank开关。现在看来这个特性将使用断言\ NotNull。你要改变NotNull行为不允许空字符串,或教义会在数据库中存储空什么时候收到空字符串?
评论都关门了。
以确保评论保持相关,他们关闭了旧的帖子。
因为它将选择(默认禁用对现有科幻应用程序)可以为现有的应用程序添加所需的配置吗?谢谢:)
Javier Eguiluz is a certified Symfony engineer.
Get certified! Online exams available in all countries.
Register Now@Jonathan DoctrineBundle中的代码让这个可配置仍悬而未决。我将更新文章的时候合并。谢谢。