2015-01-26 3 views
4

나는 모든 양식에 대해 오류의 일반 JSON 표현이 필요합니다.Symfony에서 JMSSerializer를 사용하여 JSON 객체로 양식 오류를 얻는 방법

나는 이미 how to return json encoded form errors in symfony 같은 다른 해결책을 읽었습니다. 하지만 이미 프로젝트에 연결된 다른 묶음으로 해결할 수있는 작업에 대한 서비스를 하나 더 만들고 싶지 않습니다.

내 프로젝트에 JMSSerializerBundle을 사용하고 있는데이 번들은 FormErrorHandler을 사용하여 Symfony 양식 오류를 처리 할 수 ​​있다는 것을 알고 있습니다. 하지만 지금은 모든 형태의 직렬화를 얻을 수 있습니다 :

$errors = $form->getErrors(); 
$serializer = $this->get('jms_serializer'); 
$json = $serializer->serialize($errors, 'json'); 

이 코드는 나에게 다음 JSON 객체 반환합니다

{ 
    "form": { 
     "children": { 
      "field1": [], 
      "field2": [], 
      "field_with_error": { 
       "errors": ["Error text"] 
      }, 
      "collection": { 
       "child_form": [ 
        { 
         "children": { 
          "field1": [], 
          "field2": [] 
         } 
        } 
       ] 
      } 
     } 
    }, 
    "errors": [] 
} 

을하지만 난 그런 일 (오류가있는 필드 만)가 필요합니다 :

{ 
    "field_with_error": { 
     "errors": ["Error text"] 
    } 
} 

어떻게하면됩니까? 나는이 문제를 이미 해결 한 FOSRestBundle을 보았다. 그러나 나는 그들이 그것을 한 방법을 발견하지 못했습니다. 당신이 오류를 동일한 구조를 얻을 수있는 다음 코드를 사용

+1

이것 좀 유무 : [JMSSerializer + 형태/배열 (HTTP ://stackoverflow.com/questions/15455823/jmsserializer-forms-arrays?rq=1). 배열을 "평평하게"하기 위해 자신의 처리기를 작성해야 할 수도 있습니다. [Subscribing Handlers] (http://jmsyst.com/libs/serializer/master/handler) – slaur4

+0

내가 할 수있는 것을 알고 있습니다. 하지만 이미 JMSSerializerBundle ('FormErrorHandler')에있는 솔루션을 사용하고 싶습니다. 어떻게해야합니까? –

답변

0

당신이 원하는 :

$handler = new FormErrorHandler($this->get('translator')); 
$visitor = new JsonSerializationVisitor(new SerializedNameAnnotationStrategy(new CamelCaseNamingStrategy())); 
$errors = json_encode($handler->serializeFormToJson($visitor, $editForm, array())); 

결과

"{"children":{"title":{"errors":["This value should not be blank."]},"summary":{"errors":["Give your post a summary!"]},"content":{"errors":["Your post should have some content!"]}}}" 
+0

이것은 저에게 똑같은 결과를줍니다 ('jms/serializer 1.1.0'과'SF 3.1.0') –