云客Drupal源码分析之symfony验证器组件validator

各位《云客drupal源码分析》系列的读者:
本系列一直以每周一篇的速度进行博客原创更新,希望帮助大家理解drupal底层原理,并缩短学习时间,但自《插件系统(上)》主题开始博客仅发布前言和目录,这是因为云客在思考一个问题:drupal在国外如此流行但在国内却很小众,一个重要原因应该是中文资料的缺乏,我们是否能够找到一种方式来激发中文资料的出产?此时同是积极推动者的晴空提出能否用付费阅读的方式来鼓励更多作者?并建立了一个付费阅读drupal资料的网站,个人觉得也许这能激发高质量原创内容的出产,学习者支付很少费用可以节省大量学习时间是划算的,作者也能分配精力去开发高质量内容而得到报酬,drupal普及开了对大家都有益处,为了支持晴空的这个项目,云客决定将从《插件系统(上)》主题开始后续内容全部放在这个网站上收费阅读,读者只需要付很少费用即可,云客在这里承诺该系列得到的所有订阅费用全部捐献给drupal深圳社区,用以组织活动等等,发展社区需要大家贡献力量,该网站已于2017年3月29日上线,请移步:http://nowicode.com/ 阅读本篇完整版

我是云客,【云游天下,做客四方】,联系方式见主页,欢迎转载,但须注明出处

****************************************以下为前言和目录,请移步:http://nowicode.com/ 阅读本篇完整版*******************************

 

 

前言:

本篇是为理解《云客drupal8源码分析之验证器》做准备的(drupal使用了symfony的验证器,在读那篇前应先读本篇),但本篇完全独立介绍symfony验证器validator,基于3.2版本,可看做是symfony验证器validator组件的独立文档,官网文档地址:http://symfony.com/doc/current/components/validator.html,推荐先看官网文档,本文档将补充讲述官网文档未提到或者含义模糊的地方。

 

php发展到今天已经全面支持面向对象编程了,现代大型web软件基本都是面向对象开发的,在过去的年代里我们使用php面向过程编程,那时提到数据验证,基本指对标量数据进行验证,比如表单提交的字符串、整数、布尔等等,然而现在我们主要以oop(面向对象程序设计)方式开发,此时数据验证如果是基于对象的,那么会非常高效且方便,在oop中数据验证不仅要能验证标量数据,更多的是要验证一个对象,这就是Symfony的验证器的设计目的,该组件基于java验证规范JSR303 Bean Validation specification

该规范介绍地址为:https://jcp.org/en/jsr/detail?id=303

 

验证概述:

在实际的代码中如果实现了对对象的验证,那么很容易就可以对标量数据进行验证,所以这里从如何验证一个对象讲起,如果你是设计者,先在脑海中默想一下应该如何验证一个对象呢?首先一个对象代表一个事物,它具备整体行为,那么针对这种整体性该对象本身应该作为一个验证项;通常对象包含属性(包含get类方法),这些属性的值也可能需要被验证,这又是一个验证项,如果对象实现了可遍历接口Traversable,那么遍历得到的值也可能需要被验证(注意:该值不一定由属性计算得出),这又是一个验证项,综上所述对象的验证有三大验证点:对象本身、属性、可能的遍历值。

   当属性值是标量数据时比较容易处理,但当

 

 

symfony验证器主要部件:

约束违背对象ConstraintViolation:

执行上下文对象ExecutionContext:

元数据Metadata及加载器Loader:

验证器Validator:

验证流程:

验证器接口里面定义的以下三个方法为我们使用的主要方法:

关于验证组可以分为三大类:

级联:

级联组:

遍历:

补充:

作者的话:

个人认为Symfony验证器的组序功能目前实现的并不优雅,将功能糅杂做一团,不够灵活,它依靠判断传递的组是否为默认组来启用组序,这要求对组序的定义需要放在元数据配置文件里面或者要求对象实现组序提供器接口,以执行方法返回组序,如果改为判断传递的是否为组序对象代码将优雅许多,验证时由外部随意指定组序将得到很大的灵活性。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值