web-dev-qa-db-ja.com

カスタムモジュールフォームからユーザーフィールドを更新する方法

カスタムモジュールフォームからいくつかのユーザーフィールドを更新するだけです。

私はこれを試しますが、うまくいきません:

/**
 * 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

ユーザーを正しく保存していない場合は、次を呼び出す必要があります。

$user->save();

これは、ユーザー名を変更する方法の例です。

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

次に、ユーザーにロールを追加する別の例を示します。

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

あなたは以下を試すことができます:

/**
 * 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

OK !私は自分の問題をなんとか解決し、自分のbuildFormで#default_valueではなく#valueを使用していました。

1
injetkilo