2.4 定义一个具体的插件field_validation_min_length_validator

作者:老葛,北京亚艾元软件有限责任公司,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,这里我们实现了两个成员函数,validatesettings_formvalidate是负责逻辑验证的,如果通不过验证,我们这里会去设置一个错误消息;settings_form是一个设置表单,用来定义settings列里面所需要的设置信息。


Drupal版本: