symfony - Sonata media validation at admin -
i'm trying validate image. saw answer @ sonata media: file not found
how validate image (width , height). need on that. there no proper doc in net.
to validate image dimensions using sonata media need override sonata media's imageprovider
class, sonata uses class handle image manipulation.if have extended bundle of sonata media bundle in services.yml file can define own provider below ,make sure yml file included in main config.yml
parameters: sonata.media.provider.file.class: application\sonata\mediabundle\provider\imageprovider
now create provider , extend sonata media's imageprovider
overrider validate()
function , define own validation or can override buildcreateform()/buildeditform()
, define asserts binarycontent
field
namespace application\sonata\mediabundle\provider;
//... other uses classes use sonata\mediabundle\provider\imageprovider baseprovider; class imageprovider extends baseprovider { public function __construct($name, filesystem $filesystem, cdninterface $cdn, generatorinterface $pathgenerator, thumbnailinterface $thumbnail, array $allowedextensions = array(), array $allowedmimetypes = array(), metadatabuilderinterface $metadata = null) { parent::__construct($name, $filesystem, $cdn, $pathgenerator, $thumbnail); $this->allowedextensions = $allowedextensions; $this->allowedmimetypes = $allowedmimetypes; $this->metadata = $metadata; } /** * {@inheritdoc} */ public function validate(errorelement $errorelement, mediainterface $media) { if (!$media->getbinarycontent() instanceof \splfileinfo) { return; } if ($media->getbinarycontent() instanceof uploadedfile) { $filename = $media->getbinarycontent()->getclientoriginalname(); } elseif ($media->getbinarycontent() instanceof file) { $filename = $media->getbinarycontent()->getfilename(); } else { throw new \runtimeexception(sprintf('invalid binary content type: %s', get_class($media->getbinarycontent()))); } if (!in_array(strtolower(pathinfo($filename, pathinfo_extension)), $this->allowedextensions)) { $errorelement ->with('binarycontent') ->addviolation('invalid extensions') ->end(); } if (!in_array($media->getbinarycontent()->getmimetype(), $this->allowedmimetypes)) { $errorelement ->with('binarycontent') ->addviolation('invalid mime type : ' . $media->getbinarycontent()->getmimetype()) ->end(); } if ($media->getwidth() > '1280' || $media->getheight() > 1280) { $errorelement ->with('binarycontent') ->addviolation('invalid file dimension : please upload 1280px * (1280px) image') ->end(); } } }
Comments
Post a Comment