エラー ページ / 404 の代わりに、/sitemap ページを表示したいだけです。もちろん、リダイレクトはしたくありませんが、それでも 404 HTTP 応答ヘッダーを設定したいと考えています。
これは可能ですか?私が見ることができるのは、Twig でテンプレートを設定する方法だけです。
私は間違いなくリダイレクトを望んでいません。
エラー ページ / 404 の代わりに、/sitemap ページを表示したいだけです。もちろん、リダイレクトはしたくありませんが、それでも 404 HTTP 応答ヘッダーを設定したいと考えています。
これは可能ですか?私が見ることができるのは、Twig でテンプレートを設定する方法だけです。
私は間違いなくリダイレクトを望んでいません。
Symfony クックブックに示されているように、エラー ページを 2 つの方法でオーバーライドできます。
/sitemap
404( ) 例外でのみルートを表示したい場合はHttpNotFoundException
、 で新しいテンプレートを作成することにより、Twig 例外テンプレートをオーバーライドできますapp/Resources/TwigBundle/views/Exception/error404.html.twig
。
クックブックに記載されていない別の方法は、イベント リスナーを使用することです。カーネルが例外に遭遇すると、kernel.exception
イベントが送出されます。デフォルトでは、この例外は Twig が提供する例外リスニングによって捕捉されます。イベントをリッスンしてページをレンダリングする独自のイベント リスナーを作成できます。kernel.exception
<?php
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent;
use Symfony\Component\HttpFoundation\Response;
public function onKernelException(GetResponseForExceptionEvent $event)
{
if ($event->getException() instanceof NotFoundHttpException) {
$response = $this->templating->renderResponse(/* sitemap */);
$event->setResponse($response)
}
}
(私はこのコードをテストしていないので、自分で試してみてください。もちろん、イベント リスナーにテンプレート サービスを自分で挿入する必要があります)。