Symfony 2 - how to pass data to formBuilder? Symfony 2 - how to pass data to formBuilder? symfony symfony

Symfony 2 - how to pass data to formBuilder?


You can give the object you want to use in the __construct() method.

Eg :

$form = $this    ->get('form.factory')    ->create(new ApplyStepOneFormType($this->company, $this->ad), $applicant);

In your form type :

function __construct(\Your\Bundle\Entity\Company $company, \DYB\ConnectBundle\Entity\Ad $ad) {    $this->company = $company;    $this->ad = $ad;}

And then in your form type in buildForm method :

$company = $this->company;    $builder->add('ad', 'entity', array(    'class' => '\Your\Bundle\Entity\Ad',    'query_builder' => function(\Your\Bundle\Repository\AdRepository $er) use ($company) {        return $er->getActiveAdsQueryBuilder($company);    },));


//In controller pass the value which you want to use in builder form in array like$object = new Question();$form->create(new QuestionType() , $object , array('sqtname'=>2,'question_type'=>2));//In Form type classpublic function buildForm(FormBuilderInterface $builder , array $options)    {       //for setting data field dynamically   if (array_key_exists('question_type', $options) && $options['question_type'] != '') {    $data = $em->getReference("RecrutOnlineStandardBundle:StdQuestionType",$options['question_type']->getId());  } else {    $data = "";  }  $builder->add('StdQuestionType', 'entity', array(        'class' => 'TestStandardBundle:StdQuestionType',        'property' => 'name',        'empty_value' => 'Sélectionner un question type',        'required' => true,        'data' => $data,        'query_builder' => function(EntityRepository $er ) use ( $options ) {            if (isset($options['sqtname']) && $options['sqtname'] != '') {                return $er->createQueryBuilder('sqt')                                ->where("sqt.name!= ".$options['sqtname']);            } else{               return $er->createQueryBuilder('sqt');            }        }    )); } public function setDefaultOptions(OptionsResolverInterface $resolver)     {       $resolver->setDefaults(array(         'data_class' => 'Test\QuestionBundle\Entity\Question',         'required' => false,         'sqtname' => '',         'question_type' =>''        ));     }


Bacteries' solution IS NOT a good one. For example, if you declare your type as service, it is impossible to pass an object to constructor.

A perfect solution is options - just pass data as option to form builder.