Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ImageField missing validation? #4088

Open
lauraseidler opened this issue Dec 30, 2020 · 8 comments
Open

ImageField missing validation? #4088

lauraseidler opened this issue Dec 30, 2020 · 8 comments

Comments

@lauraseidler
Copy link

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

@parijke
Copy link
Contributor

parijke commented Dec 30, 2020

Do you check the mimetype?

@lauraseidler
Copy link
Author

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.

@cristobal85
Copy link

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="........................................"
     *   )
     * })
     */

@parijke
Copy link
Contributor

parijke commented Jan 5, 2021

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
Copy link
Contributor

parijke commented Jan 5, 2021

and my field def:

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

@lauraseidler
Copy link
Author

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.

@parijke
Copy link
Contributor

parijke commented Feb 7, 2021

@Seb33300
Copy link
Contributor

Same as #5227
I created a PR here: #6258

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants