Всем привет. Очень нужна ваша помощь, долгое время бьюсь над одной задачей и почти решил, но выолезло еще одно :)
Есть форма. В форме есть 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
Вопрос задан 11.04.2020 - 11:27