api - FOSRestBundle post many to one relation -
i know how post data when entity has manytoone relation in fosrestbundle.
user entity has locale (locale_id):
/** * @orm\manytoone(targetentity="locale") * @orm\joincolumn(name="locale_id", referencedcolumnname="id") */ private $locale;
i hoping passing like:
{ "user":{ "firstname":"john", "emailaddress":"somewhere@somehow.com", "lastname":"doe", "sex":"1", "locale":{ "id":"1" } } }
will work, not pass validation , symfony throws:
{"code":400,"message":"validation failed","errors":{"children":{"firstname":[],"lastname":[],"emailaddress":[],"sex":[],"locale":{"errors":["this value not valid."]}}}}
as can see, locale still wrong.
does know how can post properly?
edit
here how form looks like:
<?php namespace software\bundle\form\type; use doctrine\orm\entityrepository; use symfony\component\form\formbuilderinterface; use symfony\component\optionsresolver\optionsresolverinterface; use symfony\component\validator\constraints\email; use symfony\component\validator\constraints\length; use symfony\component\validator\constraints\notblank; /** * class usertype * @package software\bundle\form\type */ class usertype extends abstractformtype { public function buildform(formbuilderinterface $builder, array $option) { $builder ->add('firstname', 'text', [ 'label' => 'word.first_name', 'required' => true ]) ->add('lastname', 'text', [ 'label' => 'word.last_name', 'required' => true ]) ->add('emailaddress', 'email', [ 'label' => 'word.email_address', 'required' => true ]) ->add('sex', 'choice', [ 'label' => 'word.sex', 'choices' => [ '0' => 'word.male', '1' => 'word.female' ], 'required' => true, 'empty_value' => 'word.select', 'empty_data' => null ]) ->add('locale', 'entity', [ 'label' => 'word.locale', 'required' => false, 'property' => 'code', 'class' => 'softwarebundle:locale', 'query_builder' => function(entityrepository $er) { return $er->createquerybuilder('l') ->orderby('l.code', 'asc'); }, 'placeholder' => 'word.select', 'empty_data' => null ]) ; } public function setdefaultoptions(optionsresolverinterface $resolver) { $resolver->setdefaults([ 'translation_domain' => 'general', 'data_class' => 'software\bundle\entity\user', 'attr' => ['novalidate' => 'novalidate'], 'csrf_protection' => false ]); } public function getname() { return 'user'; } }
edit 2
and controller:
public function postaction(request $request) { $form = $this->createform(new usertype(), new user()); $form->handlerequest($request); if($form->isvalid()) { die('are valid or not??'); } return $this->view($form, 400); }
try without "1" , 1 , otherwise can interpreted string.
edit :
{ "user":{ "firstname":"john", "emailaddress":"somewhere@somehow.com", "lastname":"doe", "sex":"1", "locale": 1 } } }
Comments
Post a Comment