作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com
打开plugins\validator这个目录,我们看到这里定义了一个简单的验证器field_validation_min_length_validator。我们打开这个文件:
$plugin = array(
'label' => t('Min length'),
'handler' => array(
'class' => 'field_validation_min_length_validator',
),
);
class field_validation_min_length_validator extends field_validation_validator {
/**
* Validate field.
*/
public function validate() {
$min_length = $this->rule->settings['data'];
if($this->value != '' && (drupal_strlen($this->value) < $min_length)){
$error_element = $this->error_element();
$error_message = $this->error_message();
form_set_error($error_element,$error_message);
}
}
/**
* Provide settings option
*/
function settings_form(&$form, &$form_state) {
$form['settings']['data'] = array(
'#title' => t('Minimum number of characters'),
'#description' => t("Specify the minimum number of characters that have to be entered to pass validation."),
'#type' => 'textfield',
//'#default_value' => $this->options['link_to_user'],
'#default_value' => '',
);
}
}
如果不使用钩子函数定义插件的话,那么每个插件文件的最上面,必须有一个$plugin数组,用来定义插件。Ctools插件会读取这个数组里面的信息。
$plugin = array(
'label' => t('Min length'),
'handler' => array(
'class' => 'field_validation_min_length_validator',
),
);
插件里面包含哪些键,取决于你的插件系统本身,我们这里有'label','handler'两个键,后者里面包含了'class'。
field_validation_min_length_validator是一个类,继承自field_validation_validator,这里我们实现了两个成员函数,validate和settings_form;validate是负责逻辑验证的,如果通不过验证,我们这里会去设置一个错误消息;settings_form是一个设置表单,用来定义settings列里面所需要的设置信息。