嵌入不同Forms的EventListener

时间:2017-11-14 07:40:42

标签: forms symfony event-listener

我在symfony 3中创建了一个包含其他表单集合的表单。提交后我想操作不同的数据。我怎样才能访问它以及如何设置它们?

这是我尝试的方式:

    public function registerAction(Request $request)
{
    $register = $this->createFormBuilder()
        ->add('user', 'AppBundle\Form\Type\UserType', array(
            'data_class' => User::class,
        ))
        ->add('userdata', 'AppBundle\Form\Type\UserdataType', array(
            'data_class' => Userdata::class,
        ))
        ->add('addresses', 'AppBundle\Form\Type\AddressesType', array(
            'data_class' => Addresses::class,
        ))
        ->addEventListener(FormEvents::PRE_SUBMIT, function (FormEvent $event){
            $user = $event->getForm()->get('user')->getData();
            $address = $event->getForm()->get('addresses')->getData();
            $address->setSalutation($user->getSalutation());
        })
        ->getForm();

    $register->handleRequest($request);

    if ($register->isSubmitted()) {

        // do stuff
    }
    return $this->render('form/login_index.html.twig', [
        'register' => $register->createView()
    ]);
}

在这个例子中:

$user = $event->getForm()->get('user')->getData();
$address = $event->getForm()->get('addresses')->getData();
$address->setSalutation($user->getSalutation());

1 个答案:

答案 0 :(得分:1)

您应该将您正在处理的对象集成为createFormBuilder($object)方法的参数。 例如:

$user = new User();
$form = $formFactory
    ->createBuilder($user)
    ->add('username', TextType::class);

然后添加订阅者,在这种情况下,$event->getData()是用户

类的对象
$form->addEventListener(FormEvents::PRE_SUBMIT, function (FormEvent $event) {
        /** @var User $user */
        $user = $event->getData();
        $form = $event->getForm();

        // Your logic here ...
})->getForm();

<强>更新

如果您有一个嵌入的表单(与父类相关的属性),例如UserInformation,您只需拨打一个电话:

$form
     ->add('informations', UserInformationType::class)
     ->addEventListener(FormEvents::PRE_SUBMIT, function (FormEvent $event) {

        /** @var User $user */
        $user = $event->getData();
        /** @var UserInformation $userInformation */
        $userInformation = $user->getInformation();

        $form = $event->getForm();

        // Your logic here ...
})->getForm();
祝你好运。