kubou.dev();

好きな言葉は一石二鳥

symfony2のExceptionListenerでjsonを返却する。

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を返却することができました。