You are here

14 验证已有的字段

admin 的头像
Submitted by admin on 星期二, 2015-06-30 09:59

作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com

    大多数字段模块,都自带了验证功能,但有时候,这些验证并不能满足我们实际的需求。对于常用的文本字段,其验证功能更弱。假如我们创建了一个book节点类型,为其添加了一个isbn文本字段,此时我们想对isbn作进一步的验证,假定验证规则为,如果输入的字符串的长度既不是10也不是13,那么我们就认为没有通过验证,同时假定当前语言为“und”。

    不妨将这个模块命名为isbn_validation,我们来看看这个模块的主代码:

 

/**

 * Implements hook_field_attach_validate().

 */

function isbn_validation_field_attach_validate($entity_type, $entity, &$errors) {

list($id, $vid, $bundle) = entity_extract_ids($entity_type, $entity);

 

if($entity_type =='node' &&  $bundle == 'book'){

  $field_isbn_length = strlen($entity->field_isbn['und'][0]['value']); 

  if(($field_isbn_length != 10) && ($field_isbn_length != 13)){

  $errors['field_isbn']['und'][0][] = array(

  'error' => 'field_isbn', 

  'message' => t('无效的ISBN.'),

  );

  }  

}

}

 

    对于其它模块定义的字段,我们想对其进行验证的话,可以使用hook_field_attach_validate,在上面的代码中,我们对文本字段field_isbn按照我们的验证进行了检查,如果没有通过,则设置错误信息。注意这里的$errors是通过引用传递的,如果它不为空,表单就通不过验证。这里的结构为:

   $errors[字段名][当前语言][delta][]

   而右边数组值,则包含两个键,一个是'error',表示错误代码;一个是 'message',表示出现错误时显示给用户的错误提示。

    

    通过编写代码,进行验证,对于不懂程序的人来说,麻烦了很多。不过drupal.org上有一个第3方模块“Field validation”,可以方便的为每个字段实例添加正则表达式规则验证,可以帮我们解决常见的验证问题。项目地址:http://drupal.org/project/field_validation


Drupal版本: