2016-03-21 44 views
1

Doğrulama için ek açıklama içeren bir sınıfa sahibim.Symfony API Varlık Doğrulaması

namespace AppBundle\Entity; 

use Doctrine\Common\Collections\ArrayCollection; 
use Doctrine\ORM\Mapping as ORM; 
use JMS\Serializer\Annotation as Serialize; 
use Symfony\Component\Validator\Constraints as Assert; 
use AppBundle\Annotation\Link; 

/** 
* @Serialize\ExclusionPolicy("all") 
* @Serialize\AccessType(type="public_method") 
* @Serialize\AccessorOrder("custom", custom = {"id", "name", "awardType", "nominations"}) 
* @ORM\Entity(repositoryClass="AppBundle\Repository\AwardRepository") 
* @ORM\Table(name="awards") 
* @Link("self", route = "api_awards_show", params = { "id": "object.getId()" }) 
*/ 
class Award extends Entity 
{ 
    /** 
    * @Serialize\Expose() 
    * @Serialize\Type(name="string") 
    * @Assert\Type(type="string") 
    * @Assert\NotBlank(message="Please enter a name for the Award") 
    * @Assert\Length(min="3", max="255") 
    * @ORM\Column(type="string") 
    */ 
    private $name; 

    /** 
    * @Serialize\Expose() 
    * @Serialize\Type(name="AppBundle\Entity\AwardType") 
    * @Serialize\MaxDepth(depth=2) 
    * @Assert\Valid() 
    * @ORM\ManyToOne(
    *  targetEntity="AppBundle\Entity\AwardType", 
    *  inversedBy="awards" 
    *) 
    */ 
    private $awardType; 

    /** 
    * @Serialize\Expose() 
    * @Serialize\Type(name="ArrayCollection<AppBundle\Entity\Nomination>") 
    * @Serialize\MaxDepth(depth=2) 
    * @ORM\OneToMany(
    *  targetEntity="AppBundle\Entity\Nomination", 
    *  mappedBy="award" 
    *) 
    */ 
    private $nominations; 
} 

Sonra aşağıdaki o varlık doğrulamak:

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

    if (count($errors) > 0) { 
     $apiProblem = new ApiProblem(
      400, 
      ApiProblem::TYPE_VALIDATION_ERROR 
     ); 

     $apiProblem->set('errors', ['testing', 'array']); 

     throw new ApiProblemException($apiProblem); 
    } 

    $this->save($entity); 

Bu sorun i hataları ve onların hata mesajı var hangi alanların hakkında bilgi alınamıyor olmasıdır çalışıyor. Bu durumda $ hataları herhangi bir alan için hata iletileri almak için görünmüyor olabilir bilinmeyen bir tür olarak görünüyor.

Bu nesnenin hata iletilerini nasıl alırım?

cevap

2

Böyle hataların kesin mesajları alabilirsiniz: Örneğin

$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); 
} 

, çıkış olabilir:

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

bu bana tüm hataları alacak veya bunun üzerinde duracak ilk hata? – Dblock247

+0

Size tüm hataları verin – chalasr

+1

Bilgileriniz için çok teşekkür ederiz. – Dblock247