Mi-am extins tipul de articol al comenzii cu un câmp boolean suplimentar.
Înainte ca articolul de comandă să fie trimis prin „formular de modificare a comenzii” (/admin/commerce/orders/{order_id}/edit), ar trebui validat și câmpul boolean ar trebui să devină „adevărat” sau să rămână „fals”.
„Formularul de editare a comenzii” conține mai multe forme de entitate inline (IEF). Unul dintre IEF se ocupă de articolele de comandă ale comenzii. Adaug mai întâi o funcție de validare personalizată cu modulul meu personalizat:
funcția MYMODULE_inline_entity_form_entity_form_alter(array &$entity_form, FormStateInterface &$form_state)
{
...
array_unshift($entity_form['#element_validate'],'MYMODULE_inline_entity_form_validate_hide_gross_price');
...
}
Funcția de validare personalizată este invocată cu succes și logica generală de afaceri/proces a funcției de validare personalizată funcționează bine.
Problema este că nu am găsit încă o modalitate de a seta valoarea câmpului meu boolean în interiorul tipului de articol de comandă, în funcție de validarea IEF.
Am încercat-o cu $form_state->setValueForElement()
Funcția API (https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Form%21FormStateInterface.php/function/FormStateInterface%3A%3AsetValueForElement/9.3.x):
funcția MYMODULE_inline_entity_form_validate_hide_gross_price(array &$entity_form, FormStateInterface $form_state) {
...
$form_state->setValueForElement($entity_form["field_MYFIELD_hide_gross_price"]["widget"]["value"],["#value"=> true]);
...
}
Primesc un mesaj de eroare
Această valoare ar trebui să fie de tipul primitiv corect. Drupal\Core\TypedData\Plugin\DataType\BooleanData: valoare
Dacă modific codul după cum urmează:
$form_state->setValueForElement($entity_form["field_MYFIELD_hide_gross_price"]["widget"]["value"]["#value"], true);
Primesc o eroare PHP în jurnalele watchdog:
TypeError: Argumentul 1 a fost transmis
Drupal\Core\Form\FormState::setValueForElement() trebuie să fie de tipul
matrice, int dat
Deci, care este sintaxa corectă pentru a seta o valoare de câmp boolean în interiorul unui tip de articol de comandă cu formular IEF?