web-dev-qa-db-fra.com

Comment mettre à jour les champs utilisateur à partir d'un formulaire de module personnalisé?

Je dois simplement mettre à jour certains champs utilisateur à partir d'un formulaire de module personnalisé.

J'essaye mais ça ne marche pas:

/**
 * Submit the register form
 *
 * @param array $form
 * @param FormStateInterface $form_state
 * @return array|RedirectResponse
 */
public function submitForm(array &$form, FormStateInterface $form_state)
{
    // Create a new user
    $values = $form_state->getValues();

    // User from Drupal\user\Entity\User;
    $user = $this->ctrUserManager->getCurrentUser();

    if($user){

        $user->set('mail', $values['mail']);
        $user->set('field_last_name', $values['field_lastname']);
        $user->set('field_first_name', $values['field_first_name']);
        $user->set('field_civility', [$values['field_civility']]);

        $violations = $user->validate();

        if (count($violations) === 0) {
            $user->save();
            \drupal_set_message('Your profile has been updated');
            return $form;
        }
    }

    \drupal_set_message('Error during user profile update', 'error');

    return $form;
}
5
injetkilo

vous n'enregistrez pas correctement l'utilisateur, vous devez appeler:

$user->save();

Voici un exemple de modification du nom d'utilisateur:

$user->setUsername('new-username');
$user->save();

Voici un autre exemple pour ajouter un rôle à un utilisateur:

$user->addRole('administrator');
$user->save();

Pouvez-vous essayer ce qui suit:

/**
 * Submit the register form
 *
 * @param array $form
 * @param FormStateInterface $form_state
 * @return array|RedirectResponse
 */
public function submitForm(array &$form, FormStateInterface $form_state)
{
    // Create a new user
    $values = $form_state->getValues();

    // User from Drupal\user\Entity\User;
    $user = $this->ctrUserManager->getCurrentUser();

    if($user){

        $user->set('mail', $values['mail']);
        $user->set('field_last_name', $values['field_lastname']);
        $user->set('field_first_name', $values['field_first_name']);
        $user->set('field_civility', [$values['field_civility']]);

        $violations = $user->validate();

        if (count($violations) === 0) {
            $user->save();
            drupal_set_message('Your profile has been updated');
        } else {
            drupal_set_message('Error during user profile update', 'error');
        }
    }
}
7
Fons Vandamme

D'accord ! J'arrive à résoudre mes problèmes, dans ma buildForm j'utilisais #value au lieu de #default_value!

1
injetkilo