Je voudrais appeler le formulaire de connexion utilisateur dans mon thème mais je ne peux pas.
Dans Drupal 7 je l'ai fait.
$elements = drupal_get_form("user_login");
$form = drupal_render($elements);
echo utf8_decode($form);
Comment puis-je le faire avec Drupal 8?
J'ai essayé ça.
Drupal::formBuilder()->getForm(Drupal\user\Form\UserLoginForm::class)
Comment puis-je rendre cela?
Avec le code suivant, je peux afficher le formulaire de connexion, mais je ne peux pas me connecter avec. Que dois-je ajouter pour que cela fonctionne?
$form = Drupal::formBuilder()->getForm(Drupal\user\Form\UserLoginForm::class) ;
$render = Drupal::service('renderer');
$render->renderPlain($form);
Le code semble bien fonctionner. Si cela ne fonctionne pas pour une raison quelconque, assurez-vous qu'il n'y a rien d'autre dans le thème ou les modules qui pourrait interférer avec cela.
Voici comment fournir un formulaire de connexion rendu via la fonction de prétraitement. (Ce code irait à YOUR_THEME.theme
fichier.)
function YOUR_THEME_preprocess_page(&$variables) {
// You will most likely want to show and render the form for anonymous users.
$variables['login_form'] = FALSE;
if (!\Drupal::currentUser()->id()) {
$form = Drupal::formBuilder()->getForm(Drupal\user\Form\UserLoginForm::class) ;
$render = Drupal::service('renderer');
$variables['login_form'] = $render->renderPlain($form);
}
}
Ensuite, dans le modèle page.html.twig, vous pouvez le rendre (et l'utiliser) avec le code suivant.
{{ login_form }}
Vous devez utiliser \Drupal::service('renderer')->renderRoot()
au lieu de qui est déconseillé dans Drupal 8, par ex.drupal_render()
$output = \Drupal::service('renderer')->renderRoot($form);
Dans D8, vous créez des tableaux de rendu dans les contrôleurs (étend Drupal\Core\Controller\ControllerBase). Pour votre besoin, vous pouvez le faire comme avec le code suivant.
$fb = $this->formBuilder();
return $fb->getForm("Drupal\user\Form\UserLoginForm");