作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com
我们获取验证规则的代码也需要相应的调整。我们来看一个根据机读名字加载验证规则的API函数:
function field_validation_rule_load($name) {
// Use Ctools export API to fetch this rule.
ctools_include('export');
$result = ctools_export_load_object('field_validation_rule', 'names', array($name));
if (isset($result[$name])) {
return $result[$name];
}
}
这里面用到的,这两句代码,是Ctools加载可导出对象的标准用法。
ctools_include('export');
$result = ctools_export_load_object('field_validation_rule', 'names', array($name));
在field_validation_field_attach_validate里面,我们用来加载验证规则的代码是这样的:
ctools_include('export');
$rules = ctools_export_load_object('field_validation_rule', 'conditions', array('entity_type'=>$entity_type, 'bundle' => $bundle));
通过这两段代码,我们可以看到ctools_export_load_object的第一个参数,是加载的对象,这里也就是field_validation_rule,我们在schema里面创建数据库表的时候,用的就是这个名字。第二个参数可以是'names',此时第三个参数为一个数组,里面包含了一组机读名字;第二个参数还可以是'conditions',此时第三个参数也是一个数组,里面包含了多个限制条件。有兴趣的可以读读ctools_export_load_object的源代码,看看Ctools的作者怎么把这些条件转化为对应的SQL的。
我们使用ctools_export_load_object加载的都是对象的形式,以前我们的验证规则,一直都采用数组的形式,所以在field_validation_field_attach_validate里面,我添加了一句从对象到数组转换的代码:
$rule = (array)$rule_obj;
之所以这样做,是因为前面的代码都是数组,如果改为对象的话,要改很多个小地方。为了兼容起见,将加载的验证规则对象,转换为了数组的形式。
在field_validation.admin.inc里面,也有用到加载验证规则的地方,我们也做了相应的修改。由于我们使用了ctools_export_load_object,所以field_validation.rules.inc里面的代码,现在就有些多余了,我们在后面的版本中删除了这个文件。