Answers:
表单生成器不应在模板文件中被调用,因为它们被调用为时已晚。调用时render(drupal_get_form('my_form'))
,呈现错误消息的代码已执行,并且从验证处理程序报告的最终错误消息已从drupal_set_message()中被保存在当前会话中,后者从中调用form_set_error()
。
打印错误消息的代码在page.tpl.php文件中。
<?php if ($breadcrumb): ?>
<div id="breadcrumb"><?php print $breadcrumb; ?></div>
<?php endif; ?>
<?php print $messages; ?>
drupal_set_message()
保存要显示的消息的代码如下:
if ($message) {
if (!isset($_SESSION['messages'][$type])) {
$_SESSION['messages'][$type] = array();
}
if ($repeat || !in_array($message, $_SESSION['messages'][$type])) {
$_SESSION['messages'][$type][] = $message;
}
// Mark this page as being uncacheable.
drupal_page_is_cacheable(FALSE);
}
form_set_error()
在模板文件中使用是错误的方法。那么,正确的方法是什么?
drupal_get_form()
不应在模板文件内调用,而应在模块内调用。
您应该改为查看form_set_error
如果您有这样的元素:
function my_custom_module_form() {
$form = array();
$form['my_element'] = array(
'#type' => 'textfield',
'#title' => 'My Text field',
'#default_value' => 'Some default text.',
);
return $form;
}
如果您发现验证码中的值$form_state['values']
无效,请在验证回调函数中执行此操作
function my_custom_module_form_validate($form, &$form_state) {
// Do some checking on $form_state['values'], if you don't like it.
form_set_error('my_element', 'This is the error message that will be displayed.');
}
drupal_set_error()
功能。你确定你不是故意的form_set_error()
吗?