Pour ajouter une classe CSS sur un élément de formulaire basique (input, select, ...),
on ajoute la clé #attributes à son render array.
Par contre pas possible de le faire pour une liste de boutons radio par exemple. La classe s'ajoutera sur le conteneur à la place.
Il existe donc la clé #after_build pour remédier à ce problème (cf. documentation).
Elle attend une liste de noms de fonction en valeur.
Chacune de ces fonctions sera exécutée après coup pour modifier le render array de l'élément. À ce moment de l'exécution, les sous-éléments (ici les boutons radio) ont déjà été ajoutés et peuvent donc être modifiés.
Par exemple dans ma méthode buildForm() :
$form['my_field'] = [
'#type' => 'radios',
'#title' => t('My field'),
'#options' => [
0 => t('No'),
1 => t('Yes'),
],
'#after_build' => ['_my_module_radio_add_class']
];
Et dans mon fichier my_module.module :
function _my_module_radio_add_class(array $element, FormState $form_state) {
$options = array_keys($element['#options']);
// Parcours des sous-éléments options
foreach ($options as $values) {
$element[$values]['#attributes']['class'][] = 'myclass';
}
return $element;
}