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

アイキャッチ画像 Umi->d

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

コメントを追加

プレーンテキスト

  • HTMLタグは利用できません。
  • 行と段落は自動的に折り返されます。
  • ウェブページのアドレスとメールアドレスは自動的にリンクに変換されます。