2013-07-20 3 views
0

У меня возникла проблема с проверкой нового загруженного файла.Проверка Symfony2 объекта OneToMany ArrayCollection объектов изображения

У меня есть сущность продукта:

// src/Acme/DemoBundle/Entity/Product 
... 
/** 
* @ORM\OneToMany(targetEntity="Image", mappedBy="product", cascade={"persist"}) 
* @Assert\Image(
*  minWidth = 10, 
*  maxWidth = 20, 
*  minHeight = 10, 
*  maxHeight = 20 
*) 
*/ 
protected $images; 
... 
public function __construct() 
{ 
    $this->images= new \Doctrine\Common\Collections\ArrayCollection(); 
} 
public function getImages(){ 
    return $this->images; 
} 

public function setImages($images){ 
    $this->images = $images; 

    return $this; 
} 

Image объект является очень простой, с именем, размером, тип_mime.

И у меня есть работа с некоторыми пользовательскими загрузчиками, поэтому я не использую форму и форму-> isValid. Я проверить, как это:

... 
public function onUpload(PostPersistEvent $event) 
{ 
     $em= $this->doctrine->getManager(); 
     $product = $this->doctrine->getRepository('Acme\DemoBundle\Entity\Product')->findOneById($customId); 

     $image = new Image(); 
     $image->setProduct($product) 
       ->setName($uploadInfo->name) 
       ->setStoredName($uploadInfo->storedName) 
       ->setUuid($uploadInfo->uuid) 
       ->setSize($uploadInfo->size) 
       ->setMimeType($uploadInfo->mimeType); 

     $validator = Validation::createValidatorBuilder() 
     ->enableAnnotationMapping() 
     ->getValidator(); 

     $a = $product->getImages(); 
     $a->add($image); 
     $product->setImages($a); 

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

И я получил ошибку:

{"message":"Expected argument of type string, object given","class":"Symfony\\Component\\Validator\\Exception\\UnexpectedTypeException","trace":[{"namespace":"","short_class":"","class":"","type":"","function":"","file":".../vendor\/symfony\/symfony\/src\/Symfony\/Component\/Validator\/Constraints\/FileValidator.php","line":98,"args":[]} 

Если скажу я NotNull аннотации Утверждает на Enother поля (например, имя) - это работает, я могу получить ошибки , Но с ArrayCollection - нет.

Я делаю что-то неправильно и не могу найти информацию в Интернете.

Могут ли гуру помочь мне?

ответ

2

Для проверки коллекции вы можете использовать All и Valid валидаторы.

Acme\DemoBundle\Entity\Product: 
    properties: 
     images: 
      - Valid: ~ 
      - All: 
       - NotNull: ~ 

Acme\DemoBundle\Entity\Image: 
    properties: 
     file: 
      - Image: 
       minWidth: 200 
       maxWidth: 400 
       minHeight: 200 
       maxHeight: 400 
+0

Я добавил * @ORM \ OneToMany (targetEntity = "Image", mappedBy = "продукт", каскад = { "упорствовать"}) * @Assert \ All ({ * @Assert \ Image ( * MinWidth = 10, * MaxWidth = 20, * MinHeight = 10, * MaxHeight = 20 *) *}) защищенные $ изображения; Ничего не изменилось. И у меня нет свойства $ file, почему вы его добавили? –

+0

Хорошо. Я понял. Я добавил файл свойства. Установите для него UploadedFile или File. И валидация - это работы. Спасибо –

Смежные вопросы