今回は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でのページリダイレクトの方法のご紹介でした。


共に働く新しい仲間を
募集しています

スタジオ・ウミは「Drupal」に特化したサービスを提供する Drupal のエキスパートチーム。
フルリモート&フレックス制だから、働く場所を選ばず時間の使い方も自由です。
そんなワークライフバランスの整った環境で、当ブログに書かれているような
様々な技術を共に学びながら、Drupalサイト開発に携わってみたい方を募集しています。
まずはお話だけでも大歓迎!ぜひお気軽にご連絡ください。