SensioGeneratorBundle을 통해 생성 된 CRUD 양식은 described here입니다. 이것은 잘 작동합니다.Symfony2 컨트롤러에서 "Accept : application/json"을 기반으로 JSON을 반환합니다.
그러나 "Accept"HTTP 헤더에 "application/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 데이터 인 문자열이 포함
는 나는이 같은 JSON 문자열로 내 엔티티를 켤 수 있다는 것을 알아 냈다. 그냥 일반적인 출력을 렌더링하는 대신 요청자에게 직접 출력하고 싶습니다. 새로운 JsonResponse ($ json)를 반환하려고 시도했지만 JSON 문자열을 다시 인코딩하므로 이중 인코딩이 적용됩니다.- 는 HTTP requestion 헤더를 검사 할 수있는 "올바른"방법은 무엇입니까 :
그래서 나는이 개 질문이? $ _SERVER를 살펴볼 수는 있지만 Symfony2에서 더 좋은 방법이 될 수 있다고 생각합니다.
- 일반적인보기를 렌더링하지 않고도 JSON 문자열을 반환하거나 요청을 직접 JSON으로 반환하는 "올바른"방법은 무엇입니까?
고마워요!
그게 좋습니다! 엔티티가 여전히 이중 인코딩되어 있었기 때문에 약간 수정해야했습니다. 여기에 내가 무엇을 생각해 냈어 : '$ serializer = new Serializer (array (new GetSetMethodNormalizer(), array ('json'=> new JsonEncoder())); ' '$ response = $ serializer-> serialize '$ result = new Response ($ response, 200, array ('Content()'); 배열 ('success'=> true, 'data'=> 배열 ('엔티티'=> $ 엔티티)), 'json' -Type '=>'application/json '));' – Josh
그래, 주석에서 줄 바꿈을 얻는 방법을 알아낼 수 없다. 이전 코멘트에서 코드를 다시 포맷해야합니다 ... 죄송합니다. 또한 $ request-> getRequest()로 변경해야했습니다. – Josh
죄송합니다. 코드에서 코드 조각을 가져 와서 약간 다른 인코딩을 사용하고 있습니다. 댓글 코드 태그 만 지원, 그 밖의 것은 없습니다.) $ 요청 해 드리겠습니다. 답변을 수정하겠습니다. –