Я расширил свой тип элемента заказа дополнительным логическим полем.
Прежде чем элемент заказа будет отправлен через «форму редактирования заказа» (/admin/commerce/orders/{order_id}/edit), он должен быть проверен, а логическое поле должно стать «истинным» или остаться «ложным».
«Форма редактирования заказа» содержит несколько встроенных форм сущностей (IEF). Один из IEF обрабатывает позиции заказа. Сначала я добавляю пользовательскую функцию проверки с моим пользовательским модулем:
функция MYMODULE_inline_entity_form_entity_form_alter (массив и $entity_form, FormStateInterface и $form_state)
{
...
array_unshift($entity_form['#element_validate'],'MYMODULE_inline_entity_form_validate_hide_gross_price');
...
}
Пользовательская функция проверки успешно вызывается, и общая бизнес-логика/логика процесса пользовательской функции проверки также работает нормально.
Проблема в том, что я еще не нашел способа установить значение моего логического поля внутри моего типа элемента заказа, в зависимости от проверки IEF.
Я попробовал это с $form_state->setValueForElement()
Функция API (https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Form%21FormStateInterface.php/function/FormStateInterface%3A%3AsetValueForElement/9.3.x):
function MYMODULE_inline_entity_form_validate_hide_gross_price (массив & $entity_form, FormStateInterface $ form_state) {
...
$form_state->setValueForElement($entity_form["field_MYFIELD_hide_gross_price"]["виджет"]["значение"],["#значение"=> true]);
...
}
я получаю сообщение об ошибке
Это значение должно иметь правильный примитивный тип. Drupal\Core\TypedData\Plugin\DataType\BooleanData: значение
Если я изменю код следующим образом:
$form_state->setValueForElement($entity_form["field_MYFIELD_hide_gross_price"]["виджет"]["значение"]["#значение"], true);
Я получаю ошибку PHP в журналах сторожевого таймера:
TypeError: Аргумент 1 передан
Drupal\Core\Form\FormState::setValueForElement() должен иметь тип
массив, заданный
Итак, каков правильный синтаксис для установки логического значения поля внутри типа элемента заказа с формой IEF?