我有一个通过 SensioGeneratorBundle 生成的 CRUD 表单,如此处所述。这很好用。
但是,如果“Accept”HTTP 标头仅包含“application/json”,我还想返回 JSON,而不是 HTML 响应。我正在开发 JSON 服务的原型,这将帮助我快速开始。
我发现我可以将我的实体变成这样的 JSON 字符串:
use Symfony\Component\Serializer\Serializer;
use Symfony\Component\Serializer\Normalizer\GetSetMethodNormalizer;
use Symfony\Component\Serializer\Encoder\JsonEncoder;
$serializer = new Serializer(array(new GetSetMethodNormalizer()), array('json' => new
JsonEncoder()));
$json = $serializer->serialize($entity, 'json');
但是,最后,$json 包含一个字符串,它是我的 JSON 数据。我只想直接将其输出给请求者,而不是呈现通常的视图。我尝试返回一个新的 JsonResponse($json),但它重新编码了 JSON 字符串,所以它最终被双重编码。
所以我有两个问题:
- 检查 HTTP 请求标头的“正确”方法是什么?我知道我可以只查看 $_SERVER,但我认为在 Symfony2 中可能有更好的方法来执行此操作。
- 返回 JSON 字符串或将我的实体转换为直接返回给请求者的 JSON 而不呈现通常视图的“正确”方式是什么。
谢谢!