Вы здесь

Ajax field required и валидация формы

0

Всем привет. Очень нужна ваша помощь, долгое время бьюсь над одной задачей и почти решил, но выолезло еще одно :)

Есть форма. В форме есть radio buttons. В зависимости от выбранного радио, показываю или скрываю поля. К этому всему меняю параметры required и disabled чтобы нормально проходила валидация формы. но вот почему то при валидации формы, эти параметры не учитываются.

<?php
function unitaddcustomer_form_alter(&$form, FormStateInterface $form_state, $form_id) {
    if($form_id == 'node_unit_add_unit_customer_form'){

        // добавляем колбек
        // это поле имеет 2 состояния 
        // 0 == Connected
        // 1 == standalone
        $form['field_unit_standalone']['widget']['#ajax'] = [
            'callback' => 'standalon_callback_form',
        ]; 

        // добавляем врапер для поля Проект
        // это поле по умолчанию видимо и обязательно к заполению
        $form['field_unit_project']['widget']['#prefix'] = '<div id="ajax-unit-project-wrapper">';
        $form['field_unit_project']['widget']['#suffix'] = '</div>';

        // добавляем врапер для поля Тип, ставим ему required и disabled = TRUE
        // это поле по умолчанию скрыто.
        $form['field_unit_type']['widget']['#prefix'] = '<div id="ajax-unit-type-wrapper">';
        $form['field_unit_type']['widget']['#suffix'] = '</div>';
        $form['field_unit_type']['widget']['#required'] = FALSE; 
        $form['field_unit_type']['widget']['#attributes']['disabled'] = 'disabled';

    }
}


#
# Calback for Standalone field cahnge
#
function standalon_callback_form(array $form, FormStateInterface $form_state) {
    $response = new AjaxResponse(); 
    $value = $form_state->getValue('field_unit_standalone');
    $value = $value[0];
    $value = implode( " ", $value );

    if($value == 1){
        #
        # standalone checked
        #
        # Project field
        $form['field_unit_project']['widget']['#required'] = FALSE; 
        $form['field_unit_project']['widget']['#attributes']['disabled'] = 'disabled';
        $ajax_css_project = array('display' => 'none',);

        # Type field
        $form['field_unit_type']['widget']['#required'] = TRUE; 
        unset($form['field_unit_type']['widget']['#attributes']['disabled']);
                $ajax_css_standalone = array('display' => 'block',);

    } elseif ($value == 0) {
        #
        # Connected checked
        #   

        # Project field
        $form['field_unit_project']['widget']['#required'] = TRUE; 
        unset($form['field_unit_project']['widget']['#attributes']['disabled']);
        $ajax_css_project = array('display' => 'block',); 

        # Type field
        $form['field_unit_type']['widget']['#required'] = FALSE; 
        $form['field_unit_type']['widget']['#attributes']['disabled'] = 'disabled';
        $ajax_css_standalone = array('display' => 'none',);
}
    #
    # Add Ajax Response
    #
    $response->addCommand(new ReplaceCommand('#ajax-unit-project-wrapper', $form['field_unit_project']['widget']));
    $response->addCommand(new ReplaceCommand('#ajax-unit-type-wrapper', $form['field_unit_type']['widget']));

    return $response;

}   

Так вот, когда поле field_unit_standalone == 1, Поле field_unit_project "визуально" становиться не обязательным и не активным. Т.е. звездочка пропадает и редактировать поле не возможно.
НО при сабмите формы ругается на то что поле должно быть обязательным к заполнению...

Подскажите, пожалуйста, что не так?

Версия Drupal: 
8.x
Категория: 
AJAXEntity APIField API
Вопрос задан 11.04.2020 - 11:27
Аватар пользователя Denis
Denis
79

Ответы