在实体类中访问实体管理器是否正确(以确保没有重复的用户名)

Jie*_*eng 1 validation symfony doctrine-orm

我想确保在验证我的实体时没有重复的用户名

/**
 * @var string $name
 *
 * @ORM\Column(name="name", type="string", length=32)
 * @Assert\NotBlank();
 * @Assert\Callback(methods={"isUniqueUsername"})
 */
private $name;
Run Code Online (Sandbox Code Playgroud)

我想我需要使用Validator Callback.然后我将不得不为具有该用户名的用户查询数据库,所以我需要实体管理器?我该如何访问它?并"正确"访问它?我是否使用验证器类?创建一个只是为了验证1个字段的类似乎很麻烦?

Sgo*_*kes 5

在symfony2中,您可以使用唯一验证程序来确保用户名,电子邮件地址或任何其他字段是唯一的.使用注释时,它的工作方式如下:

use Symfony\Bridge\Doctrine\Validator\Constraints as Unique;

/**
 * @ORM\Entity
 * @ORM\Table
 * @Unique\UniqueEntity(fields={"email"},message="Your email is already registered")
 */
class User{
  // ...
}
Run Code Online (Sandbox Code Playgroud)

尝试通过表单添加用户时,您应该获得Unique注释中声明的消息.