Drupal8でページのリダイレクトを行う


今回はDrupal8でページのリダイレクトを行う方法をご紹介します。
Drupal7では drupal_goto
という関数でリダイレクトを行うことができましたが、Drupal8ではその関数が無くなり、様々な方法でリダイレクトを行う必要があります。
FormState オブジェクトを利用する
Form APIを利用している箇所であれば、FormStateオブジェクトの setRedirect
または setRedirectUrl
を利用してリダイレクトを行うことが出来ます。
<?php
use use Drupal\Core\Form\FormStateInterface;
public function submitForm(array &$form, FormStateInterface $form_state) {
# パス指定でリダイレクトする場合.
$form_state->setRedirectUrl(Url::fromUri("internal:/foo"));
# コントローラのルート名でリダイレクトする場合.
$form_state->setRedirect('foo.bar');
}
Symfony2のRedirectResponseを利用する
Drupal8はSymfony2フレームワークを採用していますので、Symfony2の機能を利用してリダイレクトを行うことが出来ます。
Form APIが利用できない箇所でのリダイレクトは以下の実装で行うのが良いかと思います。
<?php
use Drupal\Core\Url;
use Symfony\Component\HttpFoundation\RedirectResponse;
# パスからURLオブジェクトを生成する場合.
$url = Url::fromUri('internal:/foo');
# コントローラのルート名よりURLオブジェクトを生成する場合.
$url = \Drupal\Core\Url::fromRoute('foo.bar');
# リダイレクトレスポンスの生成.
$redirect_response = new RedirectResponse($url->toString());
# リダイレクト実行.
$redirect_response->send();
以上のようにDrupal8では7以前の実装と異なりますので、ご注意ください。
簡単ですが、Drupal8でのページリダイレクトの方法のご紹介でした。