我想在现有的节点表单中添加一个自己的验证(或提交)处理程序/函数。
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来代替额外的验证/提交处理程序,这使我能够解决我的问题(即将表单中的值分配给一个节点属性,请参阅注释)。