我在标准的“创建帐户”页面中添加了一些额外字段;特别是'确认电子邮件'字段。
如何挂钩验证,以便我可以添加一些我自己的自定义验证规则(例如检查两封电子邮件匹配)?
我找到了 hook_user_presave ,但我不确定如何编码或我应该把它放在哪里。
任何和所有帮助表示赞赏。
答案 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.');
}
}