作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com
在Beta5里面,有一个重大的改变,就是这段代码:
/*
$errors[$rule['field_name']][$langcode][$delta][] = array(
'error' => 'date_range_'.$rule['ruleid'],
'message' => t($rule['error_message']),
);
*/
if($flag){
$error = $rule['field_name'].']['.$langcode.']['.$delta.']['.$rule['col'];
$message = t($rule['error_message']);
form_set_error($error,$message);
}
以前设置错误消息的时候,我总是使用$errors数组,设置,但是它有一个问题,对于email,link这样的字段不起作用,就是说数组形式,只适用于一部分情况,还有一部分情况不适用。我开始不是很想使用form_set_error,但是这里为了解决这个问题,不得不这样。但是使用了form_set_error以后,又出现了一个新的问题,一个实体表单,嵌套到另一个表单里面的时候,form_set_error就不起作用了,不是不起作用,而是不能完全正确的工作了,为什么?因为这里我们假定了 表单元素的名字的结构是这样的:
$error = $rule['field_name'].']['.$langcode.']['.$delta.']['.$rule['col'];
一般情况下,都是正确的,但是在嵌套表单的情况下,就出了问题。有兴趣的,可以看一下field collection的嵌套形式。