作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com
在module文件中,还有一个函数field_validation_ctools_plugin_api,这个前面已经讲过了,field_validation.default_field_validation_rules.inc文件和前面所讲的一样。我把UI部分独立了出来,前期只实现了基于Ctools的导出UI,这个足够了,代码和前面的类似,所不同的是,plugins\export_ui下面field_validation_export_ui.inc文件的代码更简单一些,这里纯粹是为了测试我的想法是不是行得通,所以省去了很多功能。
最后,我们看看插件的调用,下面的代码用来加载一个字段验证器:
ctools_include('plugins');
$plugin = ctools_get_plugins('field_validation', 'validator', $rule->validator);
$class = ctools_plugin_get_class($plugin, 'handler');
if(empty($class)){
continue;
}
if (!is_subclass_of($rule->validator, 'field_validation_validator')) {
drupal_set_message(t("Plugin '@validator' should extends 'field_validation_validator'.", array('@validator' => $rule->validator)));
continue;
}
下面的代码,实例化字段验证器,验证。
$validator = new $class($entity_type, $entity, $field, $instance, $langcode, $items, $delta, $item, $rule, $errors);
$break = $validator->validate();