唯一实体错误消息

时间:2015-06-15 16:35:59

标签: api symfony exception-handling doctrine

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

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

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

1 个答案:

答案 0 :(得分:2)

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

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

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