作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com
两周后,我又增加了5个验证器,同时修正了一个bug,发布了beta3。这5个验证器分别为:
•Minimum number of selections required(适用于复选框、下拉选择框,最小选中多少项)
•Maximum number of selections allowed(适用于复选框、下拉选择框,最多选中多少项)
•Exact number of selections required(适用于复选框、下拉选择框,只能选中多少项)
•Unique(唯一性验证)
•Match another field(or entity property)(比如匹配一个字段或者一个属性)
在唯一性验证的代码里面,首先,我们检查这个字段当前的值数组里面,是否有重复的,如果没有的话,通过查询数据库,看数据库里面是否存在重复的,如果有重复的,表示不唯一,否则表示字段值是唯一的。如果我们的当前表单是编辑表单,我们在查询数据库的时候,还需要把当前实体排除在外。注意,用户编辑页面,通过entity_extract_ids获取不到用户的ID,不知道现在Drupal核心修正了这个bug没有,所以我单独的为它写了一个判断语句。
以前人们经常使用unique field模块,来验证字段的惟一性,现在有了Field Validation的Unique验证器,基本上就可以取代这个模块了,而且Field Validation支持所有的实体类型。unique field模块仅支持节点类型。
验证器“匹配一个字段或者一个属性”也使用了EntityFieldQuery,我对这种查询方式的喜欢,可能就是从编写这两个验证器开始的,在这里我发现了EntityFieldQuery的强大。如果使用db_select,也能够实现同样的功能。但是就会比较麻烦,代码的可读性也不高。