Cas d'utilisation: j'ai ajouté un champ obligatoire pour les utilisateurs. Lorsque l'utilisateur 1 (ou un administrateur) ajoute un utilisateur, le champ ne doit pas être obligatoire.
Code qui ne fonctionne pas (dans Drupal 8):
function mymodule_form_alter(&$form, FormStateInterface $form_state, $form_id) {
if ($form_id == 'user_register_form') {
if (\Drupal::currentUser()->id() == 1) {
$form['field_fieldname']['#required'] = FALSE; // No effect
$form['field_fieldname']['widget']['#required'] = FALSE;
}
}
}
Changer le widget "fonctionne", mais la validation échoue. La solution pour Drupal 7 ne semble plus être utilisable.
$form['field_fieldname'][<lang>][0]['value']['#required'] = FALSE;
Il peut être difficile de contourner le schéma de validation d'entité D8 de cette manière. Pourquoi ne définissez-vous pas simplement ces paramètres de champ comme "non requis", puis définissez
$form['field_fieldname']['widget'][0]['#required'] = TRUE
quand
\Drupal::currentUser()->id() != 1