How to pass parameter to FormType constructor from controller

后端 未结 3 1844
灰色年华
灰色年华 2020-12-13 18:31

In Symfony2.7 i was able to pass parameter to Form Type constructor directly from controller while creating the form, however in Symfony3 i\'m not able to do it!

3条回答
  •  抹茶落季
    2020-12-13 19:20

    Thanks for your time! i resolved this myself:

    I removed parameter from NewsType constructor and added data to postedBy form field using $options array, and passed data to $options array from controller, please check following:

    NewsType

    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('postedBy', HiddenType::class, array(
                'data' => $options['postedBy']
              )
            )
        ;
    }
    
    // WARNING: this is a MANDATORY block! Only options described here will be allowed to be passed.
    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'postedBy' => null,
        ));
    }
    

    Controller

    $form = $this->createForm(NewsType::class, $news, array(
        'postedBy' => $this->getUser()->getFullname(),
    );
    

    UPDATE: Please use below code if you want to access $options array from addEventListener:

    $builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) {
        $postedBy = $event->getForm()->getConfig()->getOptions()['postedBy'];
    }
    

    Hope it helps somebody! 

提交回复
热议问题