0

Webフォームとカスタム検証機能があります。どちらも正常に動作します。

しかし、検証関数内で form_set_value を実行しても、何も起こりません。

誰でも私を助けてくれますか

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);
    }
}
4

4 に答える 4

0

うーん、別のアプローチは、フォームを変更して3つのことを行うことです:1)ボタンに追加する(送信しますか?):

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

2)すべての検証関数を次のようにオーバーライドします

$form['#validate'] = 'own_validation_function_callback'

3)カスタムの有効なform_state変数が設定されているかどうかを確認します

if(isset($ form_state ['custom_not_valid'])){
$ form ['extra_element'] = ...}

own_validation_function_callbackで、フォームを自分で検証します。おそらくdrupal_validate_form()を使用します。有効でない場合は、form_stateに追加します(設定を解除しようとしない場合は!!)

$form_state['custom_not_valid'] = TRUE;

于 2012-03-23T15:23:53.753 に答える
0

api.drupal.org の form_set_value () ドキュメントを参照してください。

彼らが言うには

$form_state['values']['elem1']['elem2'] に格納されている $form['elem1']['elem2'] の値を更新する場合は、$element[ '#parents'] = array('elem1','elem2')。

それが役立つことを願っています

ムハンマド。

于 2012-03-19T07:05:45.343 に答える
0

もう少し情報をいただけますか?検証後にajaxで値を表示する必要がありますか? add $form_state['rebuild'] = TRUE;また、検証関数の下部にあることも忘れないでください。これにより、$form_state の値に基づいて $form 配列が再構築されます。form_set_value が行う唯一のことは、$form_state 配列を更新することです

于 2012-03-21T15:34:50.497 に答える
-1

Ok、

フローをたどると、関数のどこかで変数が参照として渡されないため、実際に変更した情報が失われます。コア機能を変更し、オブジェクトを参照として渡すことでこれを修正しました。

于 2012-07-01T21:19:39.760 に答える