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.