har*_*y_T 13 php validation drupal drupal-6 drupal-fapi
我试图修改一些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.'));
}
}
Run Code Online (Sandbox Code Playgroud)
goo*_*orp 13
由于您使用的是表单alter,因此您不自行创建表单,您应该自己添加验证处理程序:
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.'));
}
}
Run Code Online (Sandbox Code Playgroud)
Drupal只会默认使用定义为form_name+ 的验证_validate.由于您正在使用,情况并非如此hook_form_alter.
编辑:基本上与googletorps相同的答案.张贴我的时候没注意到他.留在这里作为替代解释,但他是正确的并且是第一(+1).
你的函数命名有些可疑:
与所有钩子实现一样,您的hook_form_alter函数应该以自定义模块命名,而不是在表单(例如yourModule_form_alter)之后命名,在这种情况下,它将触发所有表单.如果(看起来像)你只想挂钩到一个特定的表单,使用hook_form_FORM_ID_alter,用你的模块名称替换'hook',用你要操作的表单的id(name)替换'FORM_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.'));
}
}
Run Code Online (Sandbox Code Playgroud)