php - Symfony 2 prefilled form with data from the database -


i trying populate form fields data database in order edit them. searched on google.

here controller returns empty fields

public function userviewaction($id,request $request){      $em = $this->getdoctrine()->getmanager()->getrepository('bfvmailingbundle:mailinglist');     $user = $em->findbyid($id);      $form = $this->get('form.factory')->createbuilder('form',$user)         ->add('unsubscribed','checkbox')         ->add('name','text')         ->add('givenname','text')         ->add('additionalname','text',array('required'=>false))         ->add('familyname','text',array('required'=>false))         ->add('emailvalue','text')         ->add('language','choice',array(             'choices'  => array('en_gb' => 'en_gb', 'es_es' => 'es_es', 'fr_fr' => 'fr_fr'),             'required' => true,         ))         ->add('commentary','textarea',array('required'=>false))         ->add('save','submit')         ->getform();       if ($request->getmethod() == 'post') {         $form->bindrequest($request);          if ($form->isvalid()) {             // perform action, such save object database             $em->flush();             return $this->redirect($this->generateurl('user_view',array('id'=>$id)));         }     } 

and template

<div class="cell">       {{ form_start(form, {'attr': {'class': 'form-horizontal'}}) }}     {{ form_end(form) }} </div> 

did miss something?

edit - read solution

as john noel implied build externalised form command

php app/console doctrine:generate:form bfvmailingbundle:mailinglist 

my entity mailinglist instead of user

the mailinglisttype form template generated in bfv\mailingbundle\form. i've added data types myself.

<?php namespace bfv\mailingbundle\form;  use symfony\component\form\abstracttype; use symfony\component\form\formbuilderinterface; use symfony\component\optionsresolver\optionsresolverinterface;  class mailinglisttype extends abstracttype { /**  * @param formbuilderinterface $builder  * @param array $options  */ public function buildform(formbuilderinterface $builder, array $options) {     $str = date("u");     $codevalue = sha1($str);      $builder         ->add('secretcode','hidden',array( 'data' => $codevalue ))         ->add('name','text')         ->add('givenname','text')         ->add('additionalname','text',array('required'=>false))         ->add('familyname','text',array('required'=>false))         ->add('emailvalue','text')         ->add('language','choice',array(             'choices'  => array('en_gb' => 'en_gb', 'es_es' => 'es_es', 'fr_fr' => 'fr_fr'),             'required' => true,         ))         ->add('unsubscribed','checkbox')         ->add('commentary','textarea',array('required'=>false))         ->add('save','submit')     ; }  /**  * @param optionsresolverinterface $resolver  */ public function setdefaultoptions(optionsresolverinterface $resolver) {     $resolver->setdefaults(array(         'data_class' => 'bfv\mailingbundle\entity\mailinglist'     )); }  /**  * @return string  */ public function getname() {     return 'bfv_mailingbundle_mailinglist'; } } 

in reformated controller add add the form generator instance of mailinglist $user[0] instead of $user. read in many websites put $variable directly in form builder generated following error:

the form's view data expected instance of class  bfv\mailingbundle\entity\mailinglist, a(n) array. can avoid  error setting "data_class" option null or adding view transformer transforms a(n) array instance of  bfv\mailingbundle\entity\mailinglist 

thus in controller:

    public function userviewaction($id,request $request){     if (!$id) {         throw $this->createnotfoundexception('no id !!');     }      $em = $this->getdoctrine()->getmanager()->getrepository('bfvmailingbundle:mailinglist');     $user = $em->findbyid($id);     if (!$user){         throw $this->createnotfoundexception('no user id selected');     }      $form = $this->createform(new mailinglisttype(), $user[0]);      if ($request->getmethod() == 'post') {         $form->bindrequest($request);          if ($form->isvalid()) {             $em->flush();             return $this->redirect($this->generateurl('user_view',array('id'=>$id)));         }     }      return $this->render('bfvmailingbundle:default:user_view.html.twig',array(         'user'=>$user,         'form'=>$form->createview()             )); } 

conclusion: got view form rendering populated data database.

to you'll want form classes act view (and populate) data provide. in example you'd create form class usertype:

class usertype extends abstracttype {     public function buildform(formbuilderinterface $builder, array $options)     {         $builder             ->add('unsubscribed','checkbox')             ->add('name','text')             ->add('givenname','text')             ->add('additionalname','text',array('required'=>false))             ->add('familyname','text',array('required'=>false))             ->add('emailvalue','text')             ->add('language','choice',array(                 'choices'  => array('en_gb' => 'en_gb', 'es_es' => 'es_es', 'fr_fr' => 'fr_fr'),                 'required' => true,             ))             ->add('commentary','textarea',array('required'=>false))             ->add('save','submit')         ;     }      public function getname()     {         return 'user';     }      public function configureoptions(optionsresolver $resolver)     {         $resolver->setdefaults(array(             'data_class' => 'your\entity\class',         ));     } } 

then within controller you'd along lines of:

$form = $this->createform(new usertype(), $user); 

then rest of controller have. read on form classes though that's starting point lot of advanced functionality of symfony forms.


Comments

Popular posts from this blog

html - Outlook 2010 Anchor (url/address/link) -

javascript - Why does running this loop 9 times take 100x longer than running it 8 times? -

Getting gateway time-out Rails app with Nginx + Puma running on Digital Ocean -