File upload: How to exclude a MIME type using asserts?
assert, mime-types, symfony
Solution
You could implement a Callback constraint via an assert. One advantage of this method is you can apply the error message to any field (or fields) in your form.
use Symfony\Component\Validator\ExecutionContext;
/**
* @ORM\Entity()
* @Assert\Callback(methods={"validateFile"})
*/
class MyEntity
{
public function validateFile(ExecutionContext $context)
{
$path = $context->getPropertyPath();
if (/* $this->file is not in allowed mimeTypes ... */) {
$context->setPropertyPath($path . '.file');
$context->addViolation("Invalid file mimetype", array(), null);
}
}
}
Problem
In Symfony I can accept MIME types using: ``` /** * @Assert\File( maxSize="10M", mimeTypes={"application/pdf", "image/png"} ) */ public $file; ``` But how can I exclude something from that list? Let's say, I want to allow all uploads except for PHP files?