表单中的FOS UniqueEntity

时间:2015-10-06 16:54:48

标签: php symfony fosuserbundle

我使用FOS,我构建了自己的表单来创建用户。检测重复的用户名和电子邮件时遇到问题。

use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;

/**
 * @ORM\Entity
 * @ORM\Table(name="fos_user")
  @UniqueEntity(
 *     fields={"email"},
 *     message="Your E-Mail adress has already been registered"
 * )
 */
class User extends BaseUser
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    public function __construct()
    {
        parent::__construct();
        // your own logic
    }
}

没什么。我明白了:

  

SQLSTATE [23000]:完整性约束违规:1062重复条目   '测试'关键字' UNIQ_957A647992FC23A8'

我更喜欢错误消息。我试着:Symfony 2 - Set UniqueEntity message

1 个答案:

答案 0 :(得分:0)

实际上,FOS模型用户已经对用户名和电子邮件拥有唯一的实体约束。请确保您的表单的validation_groups设置为“Registration”或“Profile”。

/**
 * @param OptionsResolverInterface $resolver
 */
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
    $resolver->setDefaults(array(
        'data_class'        => 'AppBundle\Entity\User',
        'validation_groups' => array('Registration', 'Default'),
    ));
}

或者您可以使用“emailCanonical”字段设置自己的唯一约束。

* @UniqueEntity(fields="emailCanonical", errorPath="email", message="Your E-Mail adress has already been registered")