Drupal 7 - 确认电子邮件地址

时间:2012-01-04 14:43:40

标签: drupal drupal-7

我在标准的“创建帐户”页面中添加了一些额外字段;特别是'确认电子邮件'字段。

如何挂钩验证,以便我可以添加一些我自己的自定义验证规则(例如检查两封电子邮件匹配)?

我找到了 hook_user_presave ,但我不确定如何编码或我应该把它放在哪里。

任何和所有帮助表示赞赏。

2 个答案:

答案 0 :(得分:4)

我建议安装LoginToboggan module,它实际上可以选择开箱即用的确切功能,并且还有许多其他有用的选项。

如果您想自己做,虽然您可能最好不要实施hook_form_FORM_ID_alter()并直接向registration form添加验证功能:

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

function mymodule_user_register_form_validate(&$form, &$form_state) {
  if ($form_state['values']['first_email'] != $form_state['values']['second_email']) {
    form_set_error('second_email', 'The email addresses much match.');
  }
}

确保在实现表单更改功能后清除Drupal的缓存,以便Drupal正确注册它。

希望有所帮助。

答案 1 :(得分:3)

以下是Drupal 7的示例解决方案:

/**
 * Implements hook_menu().
 * Note: You can define your own menu callback optionally.
 */
function foo_menu() {
  $items['foo-signup'] = array(
    'title' => 'Create new account',
    'page callback' => 'drupal_get_form',
    'page arguments' => array('user_register_form'),
    'access callback' => 'user_register_access',
    'type' => MENU_CALLBACK,
  );
  return $items;
}

/**
 * Implements hook_form_FORM_ID_alter().
 */
function foo_form_user_register_form_alter(&$form, &$form_state, $form_id) {
  $form['account']['mail_confirm'] = array(
    '#type' => 'textfield',
    '#title' => t('Confirm e-mail address'),
    '#maxlength' => EMAIL_MAX_LENGTH,
    '#description' => t('Please confirm your e-mail address.'),
    '#required' => TRUE,
  );
  $form['#validate'][] = 'foo_user_register_form_validate';
}

/**
 * Implements validation callback.
 */
function foo_user_register_form_validate(&$form, &$form_state) {
  if ($form_state['values']['mail'] != $form_state['values']['mail_confirm']) {
    form_set_error('mail_confirm', 'The email addresses must match.');
  }
}