web-dev-qa-db-fra.com

Formulaire de connexion au rendu

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); 
5
Agriesean

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 }}
8
Aram Boyajyan

Vous devez utiliser \Drupal::service('renderer')->renderRoot() au lieu de drupal_render() qui est déconseillé dans Drupal 8, par ex.

$output = \Drupal::service('renderer')->renderRoot($form);
2
kenorb

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");
1
Rainer Feike