fosuserbundle的symfony2嵌入式表单验证 [英] symfony2 embedded forms validation for fosuserbundle
问题描述
在我的情况下,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屋!