唯一实体错误消息

Unique Entity Error message

我有一个用户实体,它有一些独特的字段。

下面的代码向您展示了我是如何定义它的。

/** 
 * @UniqueEntity(fields={"login"}, message="UNIQUE ERROR MESSAGE")
 */

 ......

/**
 * @var string
 *
 * @ORM\Column(name="login", type="string", length=255, unique=true)
 */
private $login;

正在开发 API,我希望能够发送正确的错误状态和正确的错误消息。

当我在数据库中插入一个重复的条目时,我想得到消息和一个与它是重复的事实相关的异常。 相反,我收到 SQL 消息的 500 错误。

{
"error": {
    "code": 500,
    "message": "Internal Server Error",
    "exception": [
        {
             "message": "An exception occurred while executing 'INSERT INTO  .... \n\nSQLSTATE[23505]: Unique violation: 7 ERROR:  duplicate key value violates unique constraint \"uniq_1d1c63b3aa08cb10\"\nDETAIL:  Key (login)=(bast) already exists.",
            "class": "Doctrine\DBAL\DBALException",
            "trace": [

这是我获得 500 的地方。

    $test = new Utilisateur();
    $test->setLogin('test');

    $manager = $this->getDoctrine()->getManager();
    $manager->persist($test);
    $manager->flush();

如何检索消息 "UNIQUE ERROR MESSAGE"?

Symfony 验证器服务可以直接用于验证定义了验证约束的任何对象。例如在控制器中:

$validator = $this->get('validator');
$errors = $validator->validate($test);

要在服务中执行验证,您可以将验证器服务传递到您的服务中。