新电子邮件字段中的Symfony表单模型@Unique

时间:2014-10-17 18:23:03

标签: symfony model-view-controller annotations

晚上好,

我添加了一个用于更改用户电子邮件的表单:

ChangeEmailFormType:

$builder->add('current_email', 'email', array(
        'label' => 'profile.changePassOrEmail.emailLbl',
        'translation_domain' => 'Startup',
        'mapped' => false,
        'attr'   => array(
            'readonly' => true,
            'value' => $this->user->getEmail()
        )
    ))
    ->add('new_email', 'repeated', array(
        'type' => 'email',
        'options' => array('translation_domain' => 'Startup'),
        'first_options' => array('label' => 'profile.changePassOrEmail.newEmail'),
        'second_options' => array('label' => 'profile.changePassOrEmail.newEmail2'),
        'invalid_message' => 'profile.changeEmail.mismatch',
    ))

对于'new_email',我生成了一个Form Model Class,如下所示:

class ChangeEmail
{
/**
 * @var string
 * @Assert\NotBlank()
 * @Assert\Email()
 */
public $new_email;
}

我的控制器如下创建表单并处理它:

  */
public function changeEmailAction(Request $request)
{
    $user = $this->container->get('security.context')->getToken()->getUser();
    if (!is_object($user) || !$user instanceof UserInterface) {
        throw new AccessDeniedException('This user does not have access to this section.');
    }


    $form_email = $this->createForm(new ChangeEmailFormType($user));
    $form_email->setData(new ChangeEmail());

    $form_email->handleRequest($request);

    if($form_email->isValid())
    {
    }else{
    }

    return $this->render(
        'UserBundle:ChangeEmail:changeEmail.html.twig',
        array(
            'form_email' => $form_email->createView()
        )
    );
}

这一切都运行正常,但我的“ChangeEmail”课程出了问题。 我不知道如何在$ new_email字段中添加“@Unique”注释。 我如何检查数据库,甚至创建自定义注释,以检查是否 电子邮件已存在于我的usertable上?在注册表格中,FosUserBundle负责处理。

问候并感谢。

1 个答案:

答案 0 :(得分:0)

解决方案:我已经编写了自己的验证器并将其绑定到new_email字段。