You are here

1.3 使用ctools_export_load_object加载对象

admin 的头像
Submitted by admin on 星期日, 2015-09-20 07:12

作者:老葛,北京亚艾元软件有限责任公司,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里面的代码,现在就有些多余了,我们在后面的版本中删除了这个文件。


Drupal版本: