5

EventListener である symfony2 に 404 ハンドラがあります。

特定の 404 では、リダイレクトを行いますが、これはうまく機能します。ブラウザーには、404 はスローされません。

new RedirectResponse( $newURL );

その行は、基本的に 404 ステータス コードを 200 に置き換えます。

ただし、404 メッセージではなく、代わりのデータを代わりに返したい場合もあります。このようなもの:

$response = new Response( $returnJSONMessage );
$response->headers->set( 'Content-Type', 'application/json' );
$response->setStatusCode(200);

コード的にはこれで問題ありませんが、404 が返されるのを止めることはできません。それはこの中にあるので、私は推測しています:

$event->setResponse( $theResponse );

タイプは GetResponseForExceptionEvent です。

データを 404 ではなく 200 として返すには、何を呼び出す必要がありますか。RedirectResponse と同じように。私は試した:

$event->stopPropagation();

しかし、それは少し後です。この場合、RedirectResponse ではない $event->setResponse 内のすべてに 404 というラベルが付けられているようです。

何か案は?

4

4 に答える 4

15

最後に、Symfony GitHub プル経由で探していたものを見つけました。

$response->headers->set( 'X-Status-Code', 200 );

例外ステータス コードをオーバーライドできます。

$response->setStatusCode(200);

動作しないでしょう。

リクエストはこちら: https://github.com/symfony/symfony/pull/5043

ここにプル: https://github.com/symfony/symfony/commit/118a5d2274dc7d6701c3e2a758b820cd49ebaf3b

于 2013-08-22T21:05:15.947 に答える
2

コードに従ってこの問題を解決しました。

use Symfony\Component\HttpKernel\Exception\HttpException;
...
$event->setException(new HttpException(200));
于 2014-10-23T02:12:16.100 に答える