Drupal7节点表单-dsm/dpm不能使用自己的验证/提交函数



我想在现有的节点表单中添加一个自己的验证(或提交)处理程序/函数。

function MY_MODULE_form_alter(&$form, &$form_state, $form_id) { 
$form['#validate'][] = 'MY_MODULE_handler';
//or
$form['actions']['submit']['#validate'][] = 'MY_MODULE_handler';
//or
$form['submit']['#submit'][] = 'MY_MODULE_handler';
//or
$form['#submit'][] = 'MY_MODULE_handler';
//or
array_unshift($form['#validate'], 'MY_MODULE_handler');
//or
$form['actions']['submit']['#submit'][]='MY_MODULE_handler';
}

但这些尝试似乎都不适用于我的处理者:

function MY_MODULE_handler($form, &$form_state){
dsm($form);  
dsm($form_state);
}

查看form_alter中的$form变量,我发现$form['actions']['submit']['#submit']$form['#validate']已经有了一个提交/验证处理程序。

但如果我使用上面的一个例子,dsm不会打印任何内容。此外,它不再打印(提交的)确认!但是如果我使用

function MY_MODULE_handler($form, &$form_state){
die('Handler was hit');
}

我看到装卸工被击中了。

原因是什么?我需要处理程序读取两个表单字段,并将它们保存在一个节点属性中。

正如@2pha所建议的那样,我使用了钩子hook_node_presave来代替额外的验证/提交处理程序,这使我能够解决我的问题(即将表单中的值分配给一个节点属性,请参阅注释)。

最新更新