fosuserbundle的symfony2嵌入式表单验证 [英] symfony2 embedded forms validation for fosuserbundle

查看:86
本文介绍了fosuserbundle的symfony2嵌入式表单验证的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在我的情况下,HI无法进行嵌入式表单验证.

HI in my case embedded forms validation doesn't work.

我已经设置了'cascade_validation' => true,,甚至在我的模型中尝试使用Valid约束来强制对子对象进行验证.也行不通.

And i have set 'cascade_validation' => true, even tried with Valid constraint in my model to force validation on a child object. Also doesn't work.

这是它的样子:

我的用户类别:

/**
 * @ORM\OneToOne(targetEntity="Info", inversedBy="user", cascade={"persist"})
 * @Assert\Valid
 */
protected $info;

我们看到它包含一个额外的信息字段类型.

As we see it contain an extra info field type.

现在是我被覆盖的控制器:

And now my overwritten controller:

public function registerBrandAction(Request $request)
    {
        /** @var $formFactory \FOS\UserBundle\Form\Factory\FactoryInterface */
        $formFactory = $this->container->get('fos_user.registration.form.factory');
        /** @var $userManager \FOS\UserBundle\Model\UserManagerInterface */
        $userManager = $this->container->get('fos_user.user_manager');
        /** @var $dispatcher \Symfony\Component\EventDispatcher\EventDispatcherInterface */
        $dispatcher = $this->container->get('event_dispatcher');

        $user = $userManager->createUser();
        $user->setEnabled(true);

        $event = new GetResponseUserEvent($user, $request);
        $dispatcher->dispatch(FOSUserEvents::REGISTRATION_INITIALIZE, $event);

        if (null !== $event->getResponse()) {
            return $event->getResponse();
        }

        $form = $formFactory->createForm(new RegistrationFormType($user));
        $form->setData($user);
        $form->add('info', new InfoFormType());
        $brand = new Info();
        $user->setBrand($info);

        if ('POST' === $request->getMethod()) {
            $form->bind($request);

            if ($form->isValid()) {
                $event = new FormEvent($form, $request);
                $dispatcher->dispatch(FOSUserEvents::REGISTRATION_SUCCESS, $event);
                $em = $this->container->get('doctrine')->getManager();
                $em->persist($info);
                $user->addRole('ROLE_ADMIN');
                $userManager->updateUser($user, false);
                $em->flush();

                if (null === $response = $event->getResponse()) {
                    $url = $this->container->get('router')->generate('fos_user_registration_confirmed');
                    $response = new RedirectResponse($url);
                }

                $dispatcher->dispatch(FOSUserEvents::REGISTRATION_COMPLETED, new FilterUserResponseEvent($user, $request, $response));

                return $response;
            }
        }

        return $this->container->get('templating')->renderResponse('FOSUserBundle:Registration:registerAdmin.html.' . $this->getEngine(), array(
                    'form' => $form->createView(),
        ));
    }

因此,在我的RegistrationFormType中,我启用了级联验证.但是验证仍然无效.谁能帮我 ?还有为什么我要在控制器中添加它呢?因为我必须要有2个用户,并且我不想为其他用户创建该信息.

So in my RegistrationFormType i have enabled cascade_validation. But Validations still doesn't work. Can anyone help me ? And also why am i adding this in controller ? Becous i have to 2 of users and i dont want to form have that Info for other one.

推荐答案

就这么简单! 只需将其添加到验证的fos用户注册表单组中即可

easy as that! just add to your validations fos user registration form group

* @Assert\NotBlank(groups={"registration"})

以及您的表单:

'validation_groups' => array('registration'),

它有效!

这篇关于fosuserbundle的symfony2嵌入式表单验证的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆