Drupal формируют проверку, не работающую на меня

Я пытаюсь изменить некоторую форму Drupal 6, кодируют и включают некоторую собственную проверку формы. Код похож на это, но проверка не работает. Я даже не вхожу в функцию thisFormName_form_validate. Какие-либо Drupalians имеют некоторые хорошие идеи?

function thisFormName_form_alter(&$form, $form_state, $form_id) {
  $form['email_address'] = array(
    '#type' => 'textfield',
    '#title' => t('Enter your email address (optional)'),
    '#default_value' => $object['email_address'],
    '#weight' => 4,
    '#size' => 60,
    '#maxlength' => 128,  
    '#description' => t('Enter email address.'),
  );


function thisFormName_form_validate($node, &$form) {
  if ($form_state['values']['email_address'] == '') 
  {
    form_set_error('', t('Email must be valid format if entered.'));

  }
}
13
задан googletorp 27 May 2010 в 14:36
поделиться

2 ответа

Поскольку вы используете средство изменения формы, вы не создаете форму самостоятельно, вы должны добавить обработчик проверки самостоятельно:

function myModule_form_alter(&$form, $form_state, $form_id) {
  $form['email_address'] = array(
    '#type' => 'textfield',
    '#title' => t('Enter your email address (optional)'),
    '#default_value' => $object['email_address'],
    '#weight' => 4,
    '#size' => 60,
    '#maxlength' => 128,  
    '#description' => t('Enter email address.'),
  );
  $form['#validate'][] = 'my_validation_function';
}


function my_validation_function(&$form, &$form_state) {
  if ($form_state['values']['email_address'] == '') {
    form_set_error('', t('Email must be valid format if entered.'));
  }
}

Drupal будет только по умолчанию использовать проверку, которая определена как имя_формы + _validate . Это не так, поскольку вы используете hook_form_alter .

13
ответ дан 1 December 2019 в 23:31
поделиться

РЕДАКТИРОВАТЬ: В основном тот же ответ, что и googletorps. Не заметил его, пока выкладывал мой. Оставляем его здесь для альтернативного объяснения, но он правильный и был первым (+1).


В названии вашей функции есть что-то подозрительное:

  • Как и все реализации хуков, ваша функция hook_form_alter должна быть названа в честь вашего пользовательского модуля, а не формы (например, yourModule_form_alter ]), и в этом случае он сработает для всех форм .Если (как кажется) вы хотите подключиться только к определенной форме, используйте hook_form_FORM_ID_alter , заменив 'hook' на имя вашего модуля, а 'FORM_ID' на id (имя) нужной формы. манипулировать.

  • Обратные вызовы функции проверки для формы перечислены как массив имен функций в $ form ['# validate'] . Это всего лишь удобный ярлык для форм, созданных вами , которые вам не нужно явно добавлять, но используйте функцию, названную в честь формы, добавив в конце '_validate'. В вашем случае вы изменяете форму, поступающую из другого модуля, поэтому вам нужно явно добавить функцию проверки.

Итак, ваш код должен выглядеть примерно так:

function yourModuleName_theFormID_form_alter(&$form, $form_state, $form_id) {
  $form['email_address'] = array(
    '#type' => 'textfield',
    '#title' => t('Enter your email address (optional)'),
    '#default_value' => $object['email_address'],
    '#weight' => 4,
    '#size' => 60,
    '#maxlength' => 128,  
    '#description' => t('Enter email address.'),
  );
  // Add custom validation callback
  $form['#validate'][] = 'yourModuleName_theFormID_validate';


function yourModuleName_theFormID_validate(&$form, &$form_state) {
  if ($form_state['values']['email_address'] == '') {
    form_set_error('', t('Email must be valid format if entered.'));
  }
}
5
ответ дан 1 December 2019 в 23:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: