作者:老葛,北京亚艾元软件有限责任公司,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。