Drupal 7 表单设置值()在webform验证期间不起作用

Drupal 7 表单设置值()在webform验证期间不起作用,drupal-7,validation,form-api,Drupal 7,Validation,Form Api,我有一个webform和一个自定义验证函数。两者都很好用 但是,当我在验证函数中执行form_set_值时,什么也不会发生 有人能帮我吗 function test_webservices_validate(&$form, &$form_state) { if (form_get_errors()) return; $form_values = $form_state['values']['submitted']; $Address =

我有一个webform和一个自定义验证函数。两者都很好用

但是,当我在验证函数中执行form_set_值时,什么也不会发生

有人能帮我吗

function test_webservices_validate(&$form, &$form_state) {

    if (form_get_errors())
        return;
    $form_values = $form_state['values']['submitted'];

    $Address = _test_webservices_translate($values);
    if (!$Address->succes) {
            form_set_value($form['submitted']['voornaam'], 'sdfdsfsd', $form_state);
            dpm($form);
            dpm($form_state);
    } else {
        _test_webservices_handledcm($form, $form_state, $Address);
    }
}
请参阅api.drupal.org上的()文档

他们说

如果要更新$form['elem1']['elem2']的值,则 应该以$form_state['values']['elem1']['elem2']的形式存储,您可以 设置$element['#parents']=array('elem1','elem2')

希望有帮助


穆罕默德。

你能提供更多的信息吗?验证后是否应在ajax中显示该值?也不要忘记
添加$form_state['rebuild']=TRUE。这将导致$form数组根据$form_状态中的值重新生成。form_set_值所做的唯一一件事就是更新$form_状态数组,另一种方法可能是表单更改表单并做三件事:
1) 添加到您的按钮(提交?):

$form['submit']['#limit_validation_errors']=array()

2) 将所有验证函数重写为

$form['#validate']='own\u validation\u function\u callback'

3) 检查是否设置了自定义有效的form_状态变量

如果(isset($form_state['custom_not_valid']){
$form['extra_element'] =…}

在您自己的\u验证\u函数\u回调中,您可以: 自己验证表单,可以使用drupal\u validate\u form()进行验证 如果无效,则添加到表单状态(如果无效,则尝试取消设置!!)

$form_state['custom_not_valid']=TRUE


当通过流时,在其中一个函数中的某个地方,变量没有作为引用传递,因此您实际上丢失了更改的信息。我通过更改核心功能并将对象作为引用传递来修复此问题。

这不是问题所在。问题是webforms在验证后重新创建表单的方式与表单通常的方式不同。嗯,您是否检查了模块的权重和webform的权重。试着给你的模块一个比webform更重的权重。据我所知,webform的权重默认为(-1),我发现了问题所在。调用验证挂钩后,表单状态不再用于执行任何操作,因此不会更改值。此外,验证钩子期间的$form变量未定义为引用变量,因此当您调整$form中的值时,它们不会被存储。。。在不更改form.inc的情况下,有没有一个好方法可以解决这个问题?没有,我想在验证失败时添加一个form元素,$form_state['rebuild']在表单中存在错误时不执行任何操作。我所需要的就是调整和重建表单。你在这里找到解决方案了吗?我也尝试在webform上使用form_set_值,但它不起作用这是旧的,所以你可能不记得了,但是:你是说你黑客了Drupal core或webform模块,将一个变量更改为引用?这可能有其他副作用。您是否将其作为修补程序提交回问题队列以供审阅?在webform中更改值的更好方法: