Validasi Symfony2 dari entitas OneToMany ArrayCollection Gambar

Saya menghadapi masalah dengan validasi file baru yang diunggah.

Saya memiliki entitas Produk saya:

// 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;
}

Entitas gambar sangat sederhana, dengan nama, ukuran, tipe mime.

Dan saya telah mengerjakan beberapa pendengar unggahan khusus, jadi saya tidak menggunakan formulir dan formulir->isValid. Saya memvalidasi seperti ini:

...
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);

Dan saya mendapat kesalahan:

{"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":[]}

Jika katakanlah saya melakukan anotasi NotNull Assert pada bidang lain (seperti nama) - berfungsi, saya bisa mendapatkan kesalahan. Tapi dengan ArrayCollection - tidak.

Saya melakukan sesuatu yang salah dan tidak dapat menemukan info di internet.

Bisakah para guru membantu saya?


person Ilia Shakitko    schedule 20.07.2013    source sumber


Jawaban (1)


Untuk memvalidasi koleksi, Anda dapat menggunakan Semua dan Validator yang 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
person Alexey B.    schedule 21.07.2013
comment
Saya telah menambahkan * @ORM\OneToMany(targetEntity=Image, mappedBy=product, cascade={persist}) * @Assert\All({ * @Assert\Image( * minWidth = 10, * maxWidth = 20, * minHeight = 10, * maxHeight = 20 * ) * }) dilindungi $gambar; Tidak ada yang berubah. Dan saya tidak memiliki properti $file, mengapa Anda menambahkannya? - person Ilia Shakitko; 21.07.2013
comment
Oke. Saya menemukannya. Saya telah menambahkan properti 'file'. Atur UploadedFile atau File di atasnya. Dan validasi berhasil. Terima kasih - person Ilia Shakitko; 21.07.2013