2016-10-23 9 views
0

FOSRestBundle 및 JMSSerializerBundle 사용 here과 같이 \FOS\RestBundle\Serializer\Normalizer\FormErrorHandler을 통해 예외로 포장 된 잘못된 양식을 가져올 수 없습니다. 대신 상기 URL에 기재된 같은 JSON 객체를 포함하는 HTTP 응답FOSRestBundle을 사용할 때 올바르지 않은 양식이 정상화되지 않습니다.

(예를 들어 code, messageerrors 키), I 폼 객체 (I는 JMSSerializerBundle 등록한)의 직렬화 된 JSON 표현을 참조. HTTP 상태는 응답 (400) JSON으로 설정됩니까 :

{ 
    "children": { 
    "title": {}, 
    "sourceAddress": { 
     "errors": [ 
     "This value should not be blank." 
     ] 
    }, 
    "payload": {} 
    } 
} 

관련 설정 및 코드 :

config.yml :

fos_rest: 
    view: 
     view_response_listener: 'force' 
     formats: 
      json: true 
    format_listener: 
     rules: 
      - { path: ^/, fallback_format: json } 
    exception: 
     enabled: true 

컨트롤러 조치 :

public function postCampaignsAction(Request $request) 
{ 
    $campaign = new Campaign(); 

    $form = $this->createForm(CampaignType::class, $campaign); 
    $form->submit($request->request->all()); 

    if ($form->isValid()) { 
     $em = $this->getDoctrine()->getManager(); 
     $em->persist($campaign); 
     $em->flush(); 

     return View::createRouteRedirect('get_campaign', [ 
      'campaign' => $campaign->getId(), 
     ]); 
    } 

    return $form; 
} 

도움을 주시면 감사하겠습니다. :)

편집 : FOSRestBundle/Resources/config/serializer.xml 이미 포함되어 있기 때문에,이 비록 필요한 이유

parameters: 
     jms_serializer.form_error_handler.class: FOS\RestBundle\Serializer\Normalizer\FormErrorHandler 

이해가 안 : 나는 parameters.yml이를 추가하여 원하는 결과를 얻을 관리했습니다

<parameters> 
     <!-- Override the default jms FormErrorHandler --> 
     <parameter key="jms_serializer.form_error_handler.class">FOS\RestBundle\Serializer\Normalizer\FormErrorHandler</parameter> 
    </parameters> 

FOSRestBundle의 버그 일 수 있습니까?

답변

1

내가 잘못 한 것을 발견했다 : JMSSerializerBundle 앞에 FOSRestBundle을 넣고 등록한다.

JMSSerializerBundleFOSRestBundleapp/AppKernel.php에 등록 된 순서입니다. FOSRestBundle\AppKernel::registerBundles에 반환 된 배열에JMSSerializerBundle 전에 경우, FOSRestBundleResources/config/serializer.xml 파일 jms_serializer.form_error_handler.class의 매개 변수 재정의 효과가 없습니다.