Validation Symfony API实体验证

Validation Symfony API实体验证,validation,symfony,Validation,Symfony,我有一个带有注释的类用于验证 名称空间AppBundle\Entity; 使用条令\Common\Collections\ArrayCollection; 使用条令\ORM\Mapping作为ORM; 使用JMS\Serializer\Annotation作为序列化; 使用Symfony\Component\Validator\Constraints作为断言; 使用AppBundle\Annotation\Link; /** *@Serialize\ExclutionPolicy(“全部”) *

我有一个带有注释的类用于验证

名称空间AppBundle\Entity;
使用条令\Common\Collections\ArrayCollection;
使用条令\ORM\Mapping作为ORM;
使用JMS\Serializer\Annotation作为序列化;
使用Symfony\Component\Validator\Constraints作为断言;
使用AppBundle\Annotation\Link;
/**
*@Serialize\ExclutionPolicy(“全部”)
*@Serialize\AccessType(type=“public\u方法”)
*@Serialize\AccessorOrder(“自定义”,自定义={“id”,“名称”,“获奖类型”,“提名”})
*@ORM\Entity(repositoryClass=“AppBundle\Repository\AwardRepository”)
*@ORM\Table(name=“奖励”)
*@Link(“self”,route=“api\u awards\u show”,params={“id”:“object.getId()”})
*/
类别奖励扩展实体
{
/**
*@Serialize\Expose()
*@Serialize\Type(name=“string”)
*@Assert\Type(Type=“string”)
*@Assert\NotBlank(message=“请输入奖励名称”)
*@Assert\Length(min=“3”,max=“255”)
*@ORM\Column(type=“string”)
*/
私人$name;
/**
*@Serialize\Expose()
*@Serialize\Type(name=“AppBundle\Entity\AwardType”)
*@Serialize\MaxDepth(深度=2)
*@Assert\Valid()
*@ORM\manytone(
*targetEntity=“AppBundle\Entity\AwardType”,
*inversedBy=“奖励”
* )
*/
私人$awardType;
/**
*@Serialize\Expose()
*@Serialize\Type(name=“ArrayCollection”)
*@Serialize\MaxDepth(深度=2)
*@ORM\OneToMany(
*targetEntity=“AppBundle\Entity\namification”,
*mappedBy=“奖励”
* )
*/
私人提名;
}
然后,我使用以下内容验证该实体:

$validator=$this->get('validator');
$errors=$validator->validate($entity);
如果(计数($errors)>0){
$apiProblem=新的apiProblem(
400,
ApiProblem::类型\验证\错误
);
$APIssublem->set('errors',['testing','array']);
抛出新的ApiProblemException($apiProblem);
}
$this->save($entity);
这很好。问题是我无法获得关于哪些字段有错误及其错误消息的信息$本例中的错误似乎属于未知类型,我似乎无法获取任何字段的错误消息


如何获取该对象的错误消息?

您可以通过以下方式获取错误的确切消息:

$errors = $validator->validate($entity);

if (count($errors) > 0) {
    $formattedErrors = [];
    foreach ($errors as $error) {
        $formattedErrors[$error->getPropertyPath()] = [
            'message' => sprintf('The property "%s" with value "%s" violated a requirement (%s)', $error->getPropertyPath(), $error->getInvalidValue(), $error->getMessage());
        ];
    }

    return new \Symfony\Component\HttpFoundation\JsonResponse($formattedErrors, 400);
}
例如,这可能会输出:

[
    'field1' => 'The property "field1" with value "" violated a requirement (Cannot be null)',
    // ...
]

这会让我知道所有的错误吗?还是会在第一个错误时停止?谢谢你提供的信息,非常感谢。不客气。如果你不介意的话,你能告诉我你为什么不支持我的答案吗?如果我能改进它,它可能会对有同样问题的人有所帮助。哦,对不起,我真的不太理解投票,我想接受它就是它应该做的。我道歉。我想我刚刚投了赞成票。我希望我没有搞乱其他答案。没问题:)这实际上不是自动的,你也不是第一个。这对其他能够阅读答案的人和答案的所有者来说都是一种鼓励。谢谢你的投票!不要犹豫,继续你之前的问题,投票给那些帮助过你的人,我们将非常感激。