Drupal 7では、次のコードを使用します。
function my_goto($path) {
drupal_goto($path, array(), 301);
}
Drupal 8ではどのコードを使用すればよいですか?
これは、Drupal 8で使用する必要があるコードです。詳細については、 変更レコード を参照してください。
use Symfony\Component\HttpFoundation\RedirectResponse;
function my_goto($path) {
$response = new RedirectResponse($path);
$response->send();
return;
}
構築するには Anu Mathewの応答 ;
ステータスコードを追加するには、RedirectResponseクラスの2番目のパラメータのみです。
use Symfony\Component\HttpFoundation\RedirectResponse;
function my_goto($path) {
$response = new RedirectResponse($path, 302);
$response->send();
return;
}
これは、組み込みの交響曲EventDispatcherコンポーネントを利用することで実現できます。カスタムモジュールを作成するだけです。 services.ymlファイルを追加し、適切なサービス構成を提供します。
services:
mymodue.subscriber:
class: Drupal\my_module\EventSubscriber
tags:
- { name: event_subscriber }
モジュールのsrcディレクトリに追加して、EventSubscriber.phpクラスを作成し、メソッドをここに記述します。
<?php
use Symfony\Component\HttpFoundation\RedirectResponse;
public function checkForCustomRedirect(GetResponseEvent $event) {
$route_name = \Drupal::request()->attributes->get(RouteObjectInterface::ROUTE_NAME);
if($route_name === 'module.testPage') {
$event->setResponse(new RedirectResponse($url, $status = 302,$headers);
}
}
/**
* {@inheritdoc}
*/
public static function getSubscribedEvents() {
$events = [];
$events[KernelEvents::REQUEST][] = array('checkForCustomRedirect');
return $events;
}
私はdrupal 8ではまだ機能していませんでしたが、ドキュメントのとおりdrupal_goto
はDrupal 8.から削除されます。
代わりに drupal_goto
書く必要があります:
return new RedirectResponse(\Drupal::url('route.name'));
そして、パラメータを持つこのようなもの:
return new RedirectResponse(\Drupal::url('route.name', [], ['absolute' => TRUE]));
ここをチェック https://www.drupal.org/node/2023537 および class RedirectResponse
私にとって完璧に機能するリダイレクトコードは次のとおりです:
$response = new RedirectResponse($path);
return $response->send();
その他の場合は、たとえば次のような例外またはエラーが発生します。LogicException:コントローラは応答を返す必要があります...
[〜#〜]または[〜#〜]
https://www.drupal.org/project/drupal/issues/2852657
それについての議論はすでにあります、それが役に立てば幸いです!
これは内部または外部リダイレクトで機能します。
use Symfony\Component\HttpFoundation\RedirectResponse;
use Drupal\Core\Url;
$url = Url::fromUri('internal:/node/27'); // choose a path
// $url = Url::fromUri('https://external_site.com/');
$destination = $url->toString();
$response = new RedirectResponse($destination, 301);
$response->send();