web-dev-qa-db-fra.com

Comment modifier si un champ est requis dans un formulaire?

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;
3
hansfn

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
1
Drupal de Comptoir