EasyAdminBundle icon indicating copy to clipboard operation
EasyAdminBundle copied to clipboard

`ImageField` missing validation?

Open lauraseidler opened this issue 5 years ago • 8 comments

Describe the bug I'm using the ImageField like so:

ImageField::new('avatar')
    ->setUploadDir('public/uploads/avatars/')
    ->setBasePath('uploads/avatars')
    ->setUploadedFileNamePattern('[year]-[month]-[day]-[contenthash].[extension]')

This works, however I'm able to also upload files that are not images. I would be fine adding this validation manually, but I haven't really found a way to do so

To Reproduce Install EA 3.2.0, use an ImageField like described above, and upload a file that's not an image

lauraseidler avatar Dec 30 '20 17:12 lauraseidler

Do you check the mimetype?

parijke avatar Dec 30 '20 19:12 parijke

How would I go about this? I tried adding constraints to my entity, but I could not make File or Image constraints work, since the field only holds the file path it seems.

lauraseidler avatar Jan 04 '21 10:01 lauraseidler

You can do this with these annotations in yours entities:

  • For 1 image:
   /**
     * @ORM\Column(type="string", length=255, nullable=true)
     * @Assert\Regex(
     *     pattern="/^.*\.(jpg|jpeg|png|gif)$/i",
     *     match=true,
     *     message="............"
     *   )
     */
  • For several images:
    /**
     * @ORM\Column(type="array", nullable=true)
     * @Assert\All({
     *   @Assert\Regex(
     *     pattern="/^.*\.(jpg|jpeg|png|gif)$/i",
     *     match=true,
     *     message="........................................"
     *   )
     * })
     */

cristobal85 avatar Jan 05 '21 09:01 cristobal85

I have this (but using vich)

    /**
     * @Vich\UploadableField(mapping="policy_pdf", fileNameProperty="policy", mimeType="mimeType")
     * @Assert\File(
     *     mimeTypes = {"application/pdf"},
     *     mimeTypesMessage = "Only PDF's can be uploaded"
     * )
     * @var File
     */

parijke avatar Jan 05 '21 09:01 parijke

and my field def:

        $policyFile = Field::new('policyFile')
            ->setFormType(VichFileType::class);

parijke avatar Jan 05 '21 09:01 parijke

Both very helpful, thanks (apologies for the delayed response, I had to table this project for a while)!

I was indeed already using Vich before, so I don't really mind to keep using it, as I found it to work well for me, and I got it to work for single images just fine. Any ideas on how to make it work for multiple images @parijke? I'm thinking I might need to go the extra step here and do an Images entity, and then just associate them.

lauraseidler avatar Feb 06 '21 19:02 lauraseidler

@lauraseidler https://www.youtube.com/watch?v=dKX_yREDOmQ&t=619s

parijke avatar Feb 07 '21 10:02 parijke

Same as https://github.com/EasyCorp/EasyAdminBundle/issues/5227 I created a PR here: https://github.com/EasyCorp/EasyAdminBundle/pull/6258

Seb33300 avatar Apr 13 '24 14:04 Seb33300

Closing as fixed in #6258.

javiereguiluz avatar May 21 '24 19:05 javiereguiluz