该错误表示form_token
需求无效,需要重新生成。这基本上是一个隐藏的表单字段(通常用于防止跨站点伪造)。
通常,令牌元素会由自动添加到每个Drupal表单drupal_prepare_form()
,因此,除非您正在编写自己的代码,否则通常不必自己添加一个。
如果你想编写一些多页表格,你可能需要在每个令牌提交使用重新生成drupal_get_token()
,例如如图所示在这里:
$form_state['input']['form_token'] = drupal_get_token($form['#token']);
关于强制在form_alter中重新生成表单令牌的解决方法,请检查以下示例:
/**
* Implements hook_form_alter().
*/
function mymodule_form_alter(&$form, &$form_state, $form_id) {
if ($form_id === 'your_form_entityform_edit_form' && !empty($form_state['input']['form_id'])) {
$form_id = $form_state['input']['form_id'];
$form ['#token'] = $form_id;
$form ['form_token'] = array(
'#id' => drupal_html_id('edit-' . $form_id . '-form-token'),
'#type' => 'token',
'#default_value' => drupal_get_token($form['#token']),
'#parents' => array('form_token'),
);
}
}
故障排除
仔细检查您的表单是否未进行硬编码,否则请按照@thirdender的建议添加令牌:
<input name='form_token' type='hidden' value='<?php print drupal_get_token('MY_FORM_ID'); ?>'>
检查错误是否在您的表单上发生,就像在其他表单(例如,表单内的表单)一样。
- 调试
drupal_valid_token()
。