11

エラー ページ / 404 の代わりに、/sitemap ページを表示したいだけです。もちろん、リダイレクトはしたくありませんが、それでも 404 HTTP 応答ヘッダーを設定したいと考えています。

これは可能ですか?私が見ることができるのは、Twig でテンプレートを設定する方法だけです。

私は間違いなくリダイレ​​クトを望んでいません。

4

3 に答える 3

18

Symfony クックブックに示されているように、エラー ページを 2 つの方法でオーバーライドできます。

  • テンプレートのオーバーライド
  • カスタム例外コントローラーの使用

/sitemap404( ) 例外でのみルートを表示したい場合は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)
    }
}

(私はこのコードをテストしていないので、自分で試してみてください。もちろん、イベント リスナーにテンプレート サービスを自分で挿入する必要があります)。

于 2013-04-13T15:46:25.737 に答える