Symfony2 アクションでJSONを返します(その2)

POSTされたデータをそのままJSONで返す様なEchoサービスを作ってみます。

Resources/config/routing.yml

path:  /echo/
defaults: { _controller: xxxxxBundle:Echo:index }
methods: [POST]
  • POSTメソッドのみ許可します。
  • ルーティング定義のパラメータが、Symfonyのバージョンにより変更されているので注意が必要です。
    • pattern → path
    • _method→ methods
    • _scheme → schemes

アクションの実装

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\JsonResponse;

class EchoController extends Controller
{
    public function indexAction(Request $request)
    {
        $params = $request->request->all();

        return new JsonResponse($params);
    }
}
  • アクションの引数に「Request $request」としておくと、「$this->getRequest()」を省略できます。
  • 全てのPOSTデータは「$request->request->all()」で連想配列で取得できます。
  • アクションからJsonResponseを返すと、「Content-Type=application/json」でJSONテキストのレスポンスを返せます。

POSTデータの送信

  • wget : --post-data オプションを使います
  • curl : --data オプションを使います (application/x-www-form-urlencoded 形式)
  • Firefox Add-ons hackbar

JSONテキストのパース

おまけ

「$request->request->all()」を「$request->headers->all()」とすると、HTTPリクエストヘッダが取れます。