本文へ移動
STUDIO UMI
DRUPAL BLOGDrupalブログ

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

Kobayashi Motoki

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

スタジオ・ウミは15年以上の実績を誇るDrupal専門の開発会社です。豊富な知見とノウハウでDrupalサイトの開発や技術サポートなどDrupal関連サービスをワンストップでご提供します。

RECRUIT

新たなステージを共に歩んでいける
コアメンバーを募集しています

採用情報

CONTACT

お仕事のご相談やお見積依頼など、
お気軽にお問い合わせください。

お問い合わせ