php - Symfony 2. Controller's createForm does not bind Model to submodels -


i have 2 models, , 2 types. formtype "eventschedule" subform of "event". when tried use $this->createform(new eventtype(), $event); in controller, got form eventschedules(that part of event) have no links related events.

/**  * event  *  * @orm\table()  * @orm\entity(repositoryclass="voulidance\sharedbundle\repository\eventrepository")  */ class event extends baseentity {      /**      * @var integer      *      * @orm\column(name="id", type="integer")      * @orm\id      * @orm\generatedvalue(strategy="auto")      */     private $id;      /**      *      * @var string      *       * @orm\column(name="name", type="string", length=255)      * @assert\length(max = "50", maxmessage="the value long. should have maximum {{ limit }} characters")      * @assert\notblank()       */     private $name;      /**      *      * @var \datetime      *       * @orm\column(name="start_date", type="datetime")      * @assert\datetime(message = "the date should in format 'mm/dd/yyyy'.")      * @assert\notblank(message = "start date field should not blank.")      */     private $startdate;      /**      *      * @var \datetime      *       * @orm\column(name="end_date", type="datetime")      * @assert\datetime(message = "the date should in format 'mm/dd/yyyy'.")      * @assert\notblank(message = "end date field should not blank.")      */     private $enddate;      /**      * @orm\onetomany(targetentity="eventschedule", mappedby="event", cascade={"persist"})      * @orm\orderby({"dayofweek" = "asc", "starttime" = "asc"})      */     protected $eventschedules;      public function __construct()     {         $this->eventschedules = new arraycollection();     }      public function getid() {         return $this->id;     }      public function getname() {         return $this->name;     }      public function getstartdate() {         return $this->startdate;     }      public function getenddate() {         return $this->enddate;     }      public function geteventschedules() {         return $this->eventschedules;     }      public function setid($id) {         $this->id = $id;     }      public function setname($name) {         $this->name = $name;     }      public function setstartdate($startdate) {         $this->startdate = $startdate;     }      public function setenddate($enddate) {         $this->enddate = $enddate;     }      public function seteventschedules($eventschedules) {         $this->eventschedules = $eventschedules;     }      public function addeventschedule(eventschedule $eventschedule)     {         $this->eventschedules->add($eventschedule);     }       public function removeeventschedule(eventschedule $eventschedule)     {         $this->eventschedules->removeelement($eventschedule);     }        /**  * eventschedule  *  * @orm\table()  * @orm\entity(repositoryclass="voulidance\sharedbundle\repository\eventschedulerepository")  */ class eventschedule extends baseentity{      /**      * @var integer      *      * @orm\column(name="id", type="integer")      * @orm\id      * @orm\generatedvalue(strategy="auto")      */     private $id;      /**      * @var \datetime      *      * @orm\column(name="starttime", type="time", nullable=true)      * @assert\time()      * @assert\notblank(message="please, fill in fields.")      */     private $starttime;      /**      * @var \datetime      *      * @orm\column(name="endtime", type="time", nullable=true)      * @assert\time()      * @assert\notblank(message="please, fill in fields.")      */     private $endtime;      /**      * @var integer      *      * @orm\column(name="dayofweek", type="integer")      * @assert\notblank(message="please, fill in fields.")      */     private $dayofweek;      /**      * @orm\manytoone(targetentity="event", inversedby="eventschedules")      * @orm\joincolumn(name="event_id", referencedcolumnname="id")      * @assert\valid      * @assert\notblank(message="please, fill in fields.")      */     protected $event;       //assert\notblank(message="please, fill in fields.")      public function getid() {         return $this->id;     }      public function getstarttime() {         return $this->starttime;     }      public function getendtime() {         return $this->endtime;     }      public function getdayofweek() {         return $this->dayofweek;     }      public function getevent() {         return $this->event;     }      public function setid($id) {         $this->id = $id;         return $this;     }      public function setstarttime($starttime) {         $this->starttime = $starttime;         return $this;     }      public function setendtime($endtime) {         $this->endtime = $endtime;         return $this;     }      public function setdayofweek($dayofweek) {         $this->dayofweek = $dayofweek;         return $this;     }      public function setevent($event) {         $this->event = $event;         return $this;     }  }      class eventtype extends abstracttype{      public function buildform(formbuilderinterface $builder, array $options){         $builder->add('name', null, array(             'label' => false,             'attr' => array('id'=>"page-name", 'size'=>"24", 'class'=>'auth'),             'required'=>true         ))->add('startdate', 'date', array(             'widget' => 'single_text',             'label' => false,             'format' => 'mm/dd/yyyy',             'invalid_message' => "start date format should 'mm/dd/yyyy'.",             'attr' => array('data-date'=>"", 'placeholder'=>"mm/dd/yyyy", 'size'=>"18",'class'=>"auth date holiday-start-date hasdatepicker", 'id'=>"holiday-start-date")         ))->add('enddate', 'date', array(             'widget' => 'single_text',             'label' => false,             'format' => 'mm/dd/yyyy',             'invalid_message' => "end date format should 'mm/dd/yyyy'.",             'attr' => array('data-date'=>"", 'placeholder'=>"mm/dd/yyyy", 'size'=>"18",'class'=>"auth date holiday-start-date hasdatepicker", 'id'=>"holiday-start-date")         ))->add('eventschedules', 'collection', array(                 'type' => new eventscheduletype(),                 'cascade_validation' => true,                 'allow_add'    => true,                 'allow_delete' => true,                 'by_reference' => false,                 'label' => false,                 'error_bubbling'=>false             ))->add('id', 'hidden');     }      public function setdefaultoptions(optionsresolverinterface $resolver)     {         $resolver->setdefaults(array(             'data_class' => 'voulidance\sharedbundle\entity\event',             'cascade_validation' => false,             'validation_groups' => false         ));     }      public function getname()     {         return 'event';     } }      class eventscheduletype extends abstracttype {      public function buildform(formbuilderinterface $builder, array $options) {         $builder->add('starttime', 'us_time', array(             'widget' => 'text',             'label' => 'from',             'attr' => array('maxlength' => '2', 'placeholder' => 'hh:mm'),             'invalid_message' => 'time value not valid.',             'error_bubbling' => false         ))->add('endtime', 'us_time', array(             'widget' => 'text',             'label' => 'to',             'attr' => array('maxlength' => '2', 'placeholder' => 'hh:mm'),             'invalid_message' => 'time value not valid.',             'error_bubbling' => false         ))->add('dayofweek', 'choice', array(             'choices' => array(                 1 => 'everyday',                 2 => 'sunday',                 3 => 'monday',                 4 => 'tuesday',                 5 => 'wednesday',                 6 => 'thursday',                 7 => 'friday',                 8 => 'saturday',             ),             'label' => false,             'attr' => array('size'=>'15'),             'multiple' => false,             'error_bubbling' => false         ))->add('id', 'hidden', array('label' => false));     }      public function setdefaultoptions(optionsresolverinterface $resolver) {         $resolver->setdefaults(array(             'data_class' => 'voulidance\sharedbundle\entity\eventschedule',             'cascade_validation' => false,             'validation_groups' => false         ));     }      public function getname() {         return 'eventschedule';     }  }       /**      * save event      *      * @route("/save", name="admin_event_save")      * @template("voulidanceadminbundle:event:index.html.twig")      */     public function saveaction(request $request) {          $em = $this->getdoctrine()->getmanager();         $eventrepository = $em->getrepository("voulidancesharedbundle:event");         $event = new event();         $form = $this->createform(new eventtype(), $event);         $form->handlerequest($request);         $schedules = $form->get('eventschedules')->getdata();         foreach($schedules $schedule){             $schedule->setevent($event);         }         if ($form->isvalid()) {             $errors = $this->validateschedules($schedules);             if(count($errors) > 0){                 return new jsonresponse(array('subformerror'=>true, 'errors'=>$errors));             }             $em->persist($event);             $em->flush();             return new jsonresponse(array('success' => true, 'events'=>$eventrepository->findall()));         }         return new jsonresponse(array('error' => true, 'errors'=>(string)$form->geterrors(true)));     } 

although can't test code right now, think can see problem , answer question maybe can work on it.

$schedules = $form->get('eventschedules')->getdata(); 

should be:

$schedules = $event-> geteventschedules(); 

because need mapped data $form->handlerequest($request); filling $event object.


Comments

Popular posts from this blog

java - Plugin org.apache.maven.plugins:maven-install-plugin:2.4 or one of its dependencies could not be resolved -

Round ImageView Android -

How can I utilize Yahoo Weather API in android -