symfony2嵌入式表单验证fosuserbundle

时间:2014-05-27 18:12:12

标签: forms validation symfony fosuserbundle

在我的情况下,HI嵌入式表单验证不起作用。

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

这是它的样子:

我的用户类:

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

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

现在我被覆盖的控制器:

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中我启用了cascade_validation。但验证仍然不起作用。谁能帮我 ?还有为什么我在控制器中添加它?我只有2个用户,我不想形成其他人的信息。

1 个答案:

答案 0 :(得分:0)

很容易就是这样! 只需添加到您的验证用户注册表单组

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

和你的表格:

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

它有效!

相关问题