我有一张注册表,需要一个复选框才能同意网站的条款和条件。由于我不想在用户对象中保存复选框的值,我手动添加了一个未映射到数据对象的复选框字段。
当我在没有勾选条款复选框的情况下提交注册表格时,会显示错误(多数民众赞成好,因为需要复选框)。但是现在选中了复选框,这是不需要的。它应该总是未经检查(因此在表格中的每个错误之后你必须再次检查它)或保持你提交它的方式。
下面是代码(来自FOSUserBundle的覆盖RegistrationController):
public function registerAction(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();
$form->setData($user);
$form->add('xterms', 'checkbox', array(
'mapped' => false,
'empty_data' => false,
'required' => 'required',
'label' => 'label.terms',
'constraints' => array(new NotNull())));
if ('POST' === $request->getMethod()) {
$form->bind($request);
if ($form->isValid()) {
$event = new FormEvent($form, $request);
$dispatcher->dispatch(FOSUserEvents::REGISTRATION_SUCCESS, $event);
$userManager->updateUser($user);
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:register.html.'.$this->getEngine(), array(
'form' => $form->createView(),
));
}
答案 0 :(得分:1)
您可以使用表单元素选项数组中的data属性为复选框或任何表单字段添加默认值
http://symfony.com/doc/current/reference/forms/types/checkbox.html#data
$form->add('xterms', 'checkbox', array(
'mapped' => false,
'empty_data' => false,
'required' => 'required',
'label' => 'label.terms',
'data'=>false,
'constraints' => array(new NotNull())));
希望它可以帮到你
答案 1 :(得分:0)
我通过以下方式解决了这个问题:
*编辑:我已将此标记为解决方案,因为这是我解决问题的方式。然而,它并没有直接解决问题。