2016-10-23 14 views
0

FOSRestBundleとJMSSerializerBundleを使用のように、\FOS\RestBundle\Serializer\Normalizer\FormErrorHandler経由で例外でラップされる無効なフォームを取得できません。FOSRestBundleを使用しているときに無効なフォームが正規化されない

代わりに前述のURLに記載のように(例えばcodemessageerrorsキーで)JSONオブジェクトを格納するためのHTTPレスポンスの、Iは、フォームオブジェクト(IはJMSSerializerBundle登録有する)の直列化JSON表現を参照してください。 HTTPステータスは応答のJSON 400に設定しますん:

{ 
    "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; 
} 

ご迷惑をおかけして申し訳ありません。 :)

EDIT: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のパラメータのオーバーライドは効果がありません。

関連する問題