テーマでユーザーログインフォームを呼び出したいのですが、できません。
Drupal 7では、これを行いました。
$elements = drupal_get_form("user_login");
$form = drupal_render($elements);
echo utf8_decode($form);
Drupal 8でこれをどのように行うことができますか?
私はこれを試しました。
Drupal::formBuilder()->getForm(Drupal\user\Form\UserLoginForm::class)
これをどのようにレンダリングしますか?
次のコードでは、ログインフォームを表示できますが、ログインフォームでログインできません。機能させるには何を追加すればよいですか?
$form = Drupal::formBuilder()->getForm(Drupal\user\Form\UserLoginForm::class) ;
$render = Drupal::service('renderer');
$render->renderPlain($form);
コードは正常に動作しているようです。何らかの理由で機能しない場合は、テーマまたはモジュールに、これを妨げる可能性のあるものがないことを確認してください。
ここでは、プリプロセス関数を介してレンダリングされたログインフォームを提供する方法を説明します。 (このコードはYOUR_THEME.theme
ファイル。)
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);
}
}
次に、page.html.twigテンプレートで、次のコードを使用してレンダリング(および使用)できます。
{{ login_form }}
代わりに\Drupal::service('renderer')->renderRoot()
を使用する必要があります Drupal 8で廃止予定です。例:.drupal_render()
$output = \Drupal::service('renderer')->renderRoot($form);
D8では、コントローラーでレンダー配列を作成します(Drupal\Core\Controller\ControllerBaseを拡張)。必要に応じて、次のコードを使用してそれを行うことができます。
$fb = $this->formBuilder();
return $fb->getForm("Drupal\user\Form\UserLoginForm");