symfony2を使っていて、自作したExceptionクラスを投げ、それをExceptionListenerで受け取ってjsonで返却しようとしたところsymfony2のエラー画面が表示されてしまった。
jsonで返却するために以下のようにコードを記述。

エンコード形式をおまかせする場合はこんな感じ。

<?php
// エンコード形式はおまかせ
public function onKernelException(GetResponseForExceptionEvent $event)
{
$responseJson['message'] = 'hoge';
return new JsonResponse($responseJson);
}

でも、今回は指定したエンコード形式で返却したかった。
ちょっと調べたら、そういう場合はJsonResponseじゃなくてResponseを使うみたい。

<?php
// json_encodeを指定して返却
public function onKernelException(GetResponseForExceptionEvent $event)
{
$responseJson['message'] = 'hoge';
// エンコード
$responseJson = json_encode($responseJson, JSON_HEX_TAG | JSON_HEX_AMP | JSON_HEX_APOS | JSON_HEX_QUOT);
$response = new Response($responseJson, 200, array('Content-Type' =&gt; 'application/json'));
$event-&gt;setResponse($response);
}

無事、指定したエンコード形式でjsonを返却することができました。

この記事を書いた人

kubou

kubou

2049, inc.
web業界で生活しています。
お仕事の割合はディレクション:8、開発:2くらい。