ページが見つかりませんページを表示する代わりに、EventSubscriber
クラスの特定のURLにリダイレクトしたいです。私は イベントリスナーのsymfony2リダイレクト? に従いましたが、リダイレクトはホームに行きます。
これは私が使用しているコードです。
use Drupal\Core\Url;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
use Symfony\Component\HttpKernel\KernelEvents;
class PageNotFound implements EventSubscriberInterface {
public function pageNotFound(GetResponseEvent $event) {
$request = $event->getRequest();
$id = '1234';
$scheme_and_http_Host = $request->getSchemeAndHttpHost();
$url = Url::fromRoute('myroute', ['id' => $id])->toString(); // this url exist (checked)
$response = new RedirectResponse($scheme_and_http_Host . $url, Response::HTTP_MOVED_PERMANENTLY);
$event->setResponse($response);
}
/**
* {@inheritdoc}
*/
public static function getSubscribedEvents() {
$events[KernelEvents::REQUEST][] = ['pageNotFound'];
return $events;
}
}
services:
mymodule.page_not_found:
class: Drupal\mymodule\EventListener\PageNotFound
tags:
- {name: event_subscriber}
EventSubscriber
クラスからユーザーをリダイレクトするにはどうすればよいですか?
404例外をキャッチするには、_KernelEvents::EXCEPTION
_イベントをサブスクライブする必要があります。すでにHTML例外の基本クラスがあるので、これを自分でコーディングする必要はありません。 HttpExceptionSubscriberBase を拡張するクラスのon404()
メソッドにコードを配置するだけです。
例外サブスクライバーのユーティリティ基本クラス。
サブスクライバーは、このクラスを拡張し、getHandledFormats()を実装して、応答する要求フォーマットを示すことができます。次に、処理する必要があるエラーコード(HTTP応答コード)のon *()メソッドを実装します。たとえば、404 Not Foundメッセージを処理するには、メソッドを追加します。
public function on404(GetResponseForExceptionEvent $event) {}
そのメソッドは$ event-> setResponse()を呼び出して、例外の応答オブジェクトを設定する必要があります。あるいは、そうしないことを選択することもできます。そうすると、他のリスナーが例外を処理する機会を得ます。