form_set_value () не работает во время проверки для веб-формы - PullRequest
0 голосов
/ 19 марта 2012

У меня есть веб-форма и пользовательская функция проверки. Которые оба работают нормально.

Но когда я выполняю 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 ]

0 голосов
/ 02 июля 2012

Хорошо,

Что происходит при прохождении потока, где-то в одной из функций переменные не передаются в качестве ссылки, так что вы фактически теряете измененную информацию. Я исправил это, изменив функциональность ядра и передав объект в качестве ссылки.

0 голосов
/ 21 марта 2012

Можете ли вы дать больше информации?Должно ли значение появляться с ajax после проверки?Также не забудьте add $form_state['rebuild'] = TRUE; внизу вашей функции проверки.Это заставит массив $ form перестраиваться на основе значений в $ form_state.Единственное, что делает form_set_value, это обновляет массив $ form_state

0 голосов
/ 23 марта 2012

Хм, другой подход может заключаться в том, что вы изменяете свою форму и делаете три вещи: 1) добавить в кнопку (отправить?):

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

2) переопределить все функции проверки с помощью

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

3) проверить, установлена ​​ли настраиваемая допустимая переменная form_state

if (isset ($ form_state ['custom_not_valid'])) {
$ Форма [ 'extra_element'] = ...}

В своей собственной ответной функции вы: проверьте свою форму самостоятельно, возможно, с помощью drupal_validate_form () И если он недействителен, вы добавляете его в форму form_state (если не пытаетесь сбросить его !!)

$form_state['custom_not_valid'] = TRUE;

0 голосов
/ 19 марта 2012

Пожалуйста, обратитесь к form_set_value () документации на api.drupal.org.

Они говорят

если вы хотите обновить значение $ form ['elem1'] ['elem2'], которое должны храниться в $ form_state ['values'] ['elem1'] ['elem2'], вы бы set $ element ['# parent'] = массив ('elem1', 'elem2').

Надеюсь, это поможет

Мухаммад.

...