2016-04-25 5 views
0

私はSymfony 3とFOSRestBundleを使ってAPI Restを実装しようとしています。 POST/PUT/PATCHアクションが機能しません。Symfony3とFOSRestBundleのパッチアクションがある

パッチアクションを使用した例です。

フォーム::

namespace AppBundle\Form; 

use Symfony\Component\Form\AbstractType; 
use Symfony\Component\Form\FormBuilderInterface; 
use Symfony\Component\OptionsResolver\OptionsResolver; 

class SchoolType extends AbstractType 
{ 
    /** 
    * @param FormBuilderInterface $builder 
    * @param array $options 
    */ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder 
      ->add('name') 
      ->add('email') 
      ->add('address') 
      ->add('zip') 
      ->add('city') 
      ->add('url') 
      ->add('siret') 
     ; 
    } 

    /** 
    * @param OptionsResolver $resolver 
    */ 
    public function configureOptions(OptionsResolver $resolver) 
    { 
     $resolver->setDefaults(array(
      'data_class' => 'AppBundle\Entity\School', 
     )); 
    } 
} 

コントローラー:

/** 
    * Update a School entity. 
    * 
    * CURL command : 
    * curl -i -H "Content-Type: application/json" -X PUT -d '{"name" : "TEST", ...}' http://domain_name.com/api/entity/1 
    * 
    * @ApiDoc(
    *  resource=true, 
    *  description="Update a school", 
    *  statusCodes={ 
    *   200="Successful" 
    *  } 
    *) 
    * 
    * @param Request $request 
    * @param $entity 
    * 
    * @return Response 
    */ 
    public function putAction(Request $request, School $entity) 
    { 
     try { 
      $request->setMethod('PATCH'); //Treat all PUTs as PATCH 
      $form = $this->createForm(SchoolType::class, $entity, array("method" => $request->getMethod())); 

      $form->handleRequest($request); 

      if ($form->isValid()) { 
       $em = $this->getDoctrine()->getManager(); 
       $em->flush(); 
       return $entity; 
      } 
      return FOSView::create(array('errors' => $form->getErrors(true, false)), Codes::HTTP_INTERNAL_SERVER_ERROR); 
     } catch (\Exception $e) { 
      return FOSView::create($e->getMessage(), Codes::HTTP_INTERNAL_SERVER_ERROR); 
     } 
    } 

イル常に応答でこれを取得する:

{ 
    "errors": { 
    "form": { 
     "children": { 
     "name": {}, 
     "email": {}, 
     "address": {}, 
     "zip": {}, 
     "city": {}, 
     "url": {}, 
     "siret": {} 
     } 
    }, 
    "errors": [] 
    } 
} 

ます$ form->はisValid(私のコードです

)は常にfalseを返します。

私はSymfonyから始まり、私は何をすべきか分かりません。

ありがとうございました

答えて

1

解決策が見つかりました。 問題はフォームを送信しなかったことです。 ので、代わりの

$form->handleRequest($request); 

を使用して、私は

$form->submit($request->request->all(), false); 
を使用
関連する問題