2

在 Drupal 6 中创建用户时,我需要忽略两个表单字段的验证,但我根本不知道该怎么做:

  $userinfo = array(
    'name' => $login,
    'init' => $mail,
    'mail' => $mail,
    'pass' => $password,
    'status' => 1,
    'lastname' => "", //how to ignore those required fields that invalidate the form
    'surname' => ""   //how to ignore those required fields that invalidate the form
  );

  // register a new user
  $form_state = array();
  $form_state['values'] = $userinfo;
  drupal_execute('user_register', $form_state);
  $errors = form_get_errors(); // getting 2 required field errors

请注意,我不能抑制“必需”属性,因为它在其他地方以更“复杂”的形式使用。

谢谢

4

2 回答 2

1

我没有方便的 D6 站点来测试它,但我认为它会工作......

由于drupal_execute()会推动您完成整个表单构建过程,您可以利用hook_form_alter()它来删除所需的状态,但只能在您在$form_state. 例如

function MYMODULE_form_alter(&$form, &$form_state, $form_id) {
  if ($form_id == 'user_register' && !empty($form_state['custom_execution'])) {
    $form['lastname']['#required'] = FALSE;
    // etc...
  }
}

...

$form_state = array();
$form_state['values'] = $userinfo;
$form_state['custom_execution'] = TRUE;
drupal_execute('user_register', $form_state);
于 2013-09-04T21:52:22.380 回答
0

难道你不能使用hook_form_alter来抑制“必需”属性,只有当 from 没有以它的“复杂”形式使用时?

例如,如果您知道使用“复杂”形式的路径,您可以检查是否使用arg提供了这些路径。

可能会有更好的检查...

于 2013-09-02T19:38:40.233 回答