Php 形式上的唯一性

Php 形式上的唯一性,php,symfony,fosuserbundle,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 reg

我使用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”的“测试”


我更喜欢错误信息。我尝试:

实际上FOS模型用户已经对用户名和电子邮件具有唯一的实体约束。请确保表单的验证组设置为“注册”或“配置文件”

/**
 * @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")

我也试过了。但我使用了:配置选项。使用setDefaultOptions不起作用。也许表单没有看到验证组?在我的buildForm中是addEventListenerFormEvents::POST_BIND它有什么关系吗?我为symfony 2.7.4工作。请尝试在确认中设置FOS注册表验证组。yml:FOS\u用户:注册:表单:类型:验证\u组:[注册,默认值]确认。yml?也许是config.yml它是什么?给我的表格起名?如果是,则不起作用是的,config.yml是正确的。您应该将表单注册为服务,并将服务名称放入。尝试将“cascade\u validation”=>true添加到嵌入表单类型的setDefaultOptions方法中的setDefaults。