对于某些要求,我需要传递其他信息以形成提交处理程序。在表单api中,将自定义提交处理程序定义为
$additional_args = array();
$form['#submit'][] = 'my_submit_handler'
我希望将处理程序提交为
function my_submit_handler($form, &$form_state, $additional_args){
答案 0 :(得分:14)
提交处理程序由drupal fapi调用,所以你不能做那样的事情。相反,您可以将所需内容添加到$form
或$form_state
。通常的方法是:
在表单中添加了一个字段,输入值来存储该值。如果表单定义中包含值,请不要这样做。
$form['store'] = array(
'#type' => 'value',
'#value' => $value
);
这将在$form_state['values']['store']
。
将值添加到$form_state['storage']
,如果要将验证句柄中的变量转移到提交处理程序,请执行以下操作:
// Validation.
$form_state['storage']['value'] = $value;
...
// Submit
$value = $form_state['storage']['value'];
// Need to unset stored values when not used anymore.
unset($form_state['storage']['value']);
答案 1 :(得分:9)
Drupal 7:自定义参数自动传播troug $ form_state ['build_info'] ['args'] 这在http://api.drupal.org/api/drupal/includes!form.inc/function/drupal_get_form/7
中说例如:
hook_form($form, &$form_state, $myAdditionnalArg) {...}
然后在
hook_form_submit($form, &$form_state) {
...
//$form_state['build_info']['args']
是一个数组,在索引0处包含参数$myAdditionnalArg
的值
...
答案 2 :(得分:4)
正如$form['#submit'] and $form['#validate'] and $form['#process'] no longer support custom parameters中所报告的,将参数传递给提交处理程序集的建议方法如下所示:使用类似于以下内容的代码:
$form['#first_paramater'] = $value;
$form['#submit'][] = 'my_submit_handler';
处理程序会将值检索为$form['#first_paramater']
。
要注意,代码可以使用不同的字符串代替#first_paramater
,但必须以#
开头。
通常没有必要像代码那样设置提交处理程序,但是在某些情况下有必要,比如改变由另一个模块创建的表单,或者为每个提交按钮设置不同的提交处理程序以一种形式出现。
drupal_retrieve_form()保存传递给$form['#parameters']
中的表单构建处理程序的参数,其中包含:
$form_id
$form_state