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から始まり、私は何をすべきか分かりません。
ありがとうございました