Drupal form doğrulama benim için çalışmıyor

2 Cevap php

Bazı Drupal 6 form kodunu değiştirmek ve bazı yerli form doğrulama birleştirmek çalışıyorum. Kod bu gibi görünüyor, ama doğrulama çalışmıyor. Ben bile işlev thisFormName_form_validate içine almak asla. Herhangi Drupalians bazı iyi fikirler var?

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.'));

  }
}

2 Cevap

Form değiştirmek kullanıyorsanız, bu nedenle formu kendiniz oluşturmak olmadığından, size doğrulama işleyicisi kendinizi eklemek gerekir:

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 varsayılan olarak yalnızca form_name + _validate olarak tanımlanan doğrulama kullanır. Eğer hook_form_alter kullandığınız beri bu durum böyle değil.

DÜZENLEME: Temelde googletorps olarak aynı cevap. Benimkini gönderirken onun fark etmedi. Alternatif açıklama için buraya bırakarak, ama onun doğru olduğunu ve ilk (1) idi.


Işlev adlandırma hakkında garip bir şey var:

Yani kod bu gibi görünmelidir:

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.'));
  }
}