Drupal 7 Drupal7如何使用实体注册表单进行表单验证

Drupal 7 Drupal7如何使用实体注册表单进行表单验证,drupal-7,Drupal 7,我使用实体注册来让用户注册到事件。我有一些字段需要根据其他字段的值进行验证 因此,使用hook\u form\u id\u form\u alter,我能够添加第二个验证函数。第二个功能是我希望可以添加代码来验证注册表 function coastal_custom_form_registration_form_alter($form, &$form_state, $form_id) { $form['#validate'][] = 'event_registration_form_

我使用实体注册来让用户注册到事件。我有一些字段需要根据其他字段的值进行验证

因此,使用hook\u form\u id\u form\u alter,我能够添加第二个验证函数。第二个功能是我希望可以添加代码来验证注册表

function coastal_custom_form_registration_form_alter($form, &$form_state, $form_id) {
  $form['#validate'][] = 'event_registration_form_validate';  
}
但是,每当我提交表单时,应该执行验证的函数就永远不会被调用

//this function never gets called
function event_registration_form_validate(&$form, &$form_state){
  drupal_set_message('hi from validation');
  form_set_error('you are in form_registration');

}

我一整天都在想怎么做。有人知道这是怎么做到的吗?谢谢。

阅读hook\u form\u alter上的api文档,我发现您必须通过引用传递$form。因此,编写函数的正确方法应该是:

function coastal_custom_form_registration_form_alter(&$form, &$form_state, $form_id) {
  $form['#validate'][] = 'event_registration_form_validate';  
}

请注意,$form变量前面有一个符号(&)。

模块的名称是什么?你记得清除你的缓存吗?是的,我清除了缓存。该模块是一个名为coastain\u custom的自定义模块。这个模块之所以能工作,是因为它还有其他的钩子,它们工作得很好。我不熟悉实体注册模块,但请检查以确保您拥有的
FORM\u注册
FORM\u ID
是正确的。使用干净的drupal 7安装,并且只安装了2个contrib模块(实体api和实体注册),上面的验证代码是有效的。但是,当在我的开发drupal安装中使用50多个contrib模块进行测试时,验证代码不起作用。因此,一定存在冲突。我发现您需要通过引用调用$form。因此,说明函数的正确方法是
function\u custom\u form\u registration\u form\alter(&$form,&$form_state,$form_id){
而不是
函数>自定义表单注册表单更改($form,&$form_state,$form_id){