Există vreo modalitate de a seta acest lucru într-un form_alter? Sau ar trebui doar să validez starea casetei de selectare prin JS?
Ai putea înlocui #necesar
prin setarea unui handler de validare personalizat în modul de modificare a formularului, dacă doriți să generați mesajul de eroare pe partea serverului:
$form_state->setErrorByName('field_tos_accept', $error_message);
Când adaug „#required_error”, acest lucru ar trebui, după înțelesul meu, să arunce un mesaj de eroare atunci când formularul este trimis.
#required_error'
a fost introdus în 2011, dar când a fost lansat Drupal 8, se pare că a încetat să funcționeze în browserele care acceptă validarea formularelor HTML5 și, prin urmare, nu a fost niciodată adoptat cu adevărat.
Cu toate acestea, puteți utiliza atributul formular HTML5 nuvalidate
pentru a dezactiva validarea formularului pe partea client, atunci această proprietate funcționează din nou și veți primi mesajul de eroare personalizat fără un handler de validare personalizat:
funcția themename_form_alter(&$form, &$form_state, $form_id) {
// pentru formele de entitate este format din $form_id
// ENTITY_TYPE_BUNDLE_FORM_MODE_form
// BUNDLE numai dacă entitatea are pachete
// FORM_MODE numai dacă nu este implicit
// Exemple:
// node_article_edit_form - formularul de editare a nodului pentru articolul de tip conținut
// node_page_form - formular de creare a nodului pentru pagina de tip de conținut
// nodurile folosesc pentru formularul de creare modul de formular implicit
dacă ($form_id == 'node_nodetype_form') {
$form['#attributes']['novalidate'] = 'nuvalidare';
$form['field_tos_accept'] = [
'#type' => 'caseta de selectare',
'#title' => t('Sunt de acord cu termenii și condițiile.'),
'#weight' => '999',
'#required' => TRUE,
'#required_error' => t('Vă rugăm să acceptați termenii și condițiile.'),
];
}
}
Vedea https://developer.mozilla.org/en-US/docs/Web/HTML/Element/form#attr-novalidate