カスタムモジュールフォームからいくつかのユーザーフィールドを更新するだけです。
私はこれを試しますが、うまくいきません:
/**
* 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;
}
ユーザーを正しく保存していない場合は、次を呼び出す必要があります。
$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');
}
}
}
OK !私は自分の問題をなんとか解決し、自分のbuildFormで#default_valueではなく#valueを使用していました。