我只想在Symfony(v2.8.32)应用程序中使用Sonata Media Bundle(v3.10.0)验证我在Sonata Admin(v3.28.0)中上传的图像扩展名。
我已经阅读了所有类似的问题和索纳塔文件,但仍然没有成功。
我尝试向config.yml
sonata_media:
providers:
image:
allowed_extensions:
- 'jpg'
- 'png'
我不知道它不会按原样运行,因为标准FileProvider
(由ImageProvider
扩展)在validate
方法中具有扩展程序检查功能。但是这个方法没有被调用。
所以我也尝试创建自定义提供程序:
services.yml
:
sonata.media.provider.custom:
class: Application\Sonata\MediaBundle\Provider\CustomImageProvider
tags:
- { name: sonata.media.provider }
arguments:
- sonata.media.provider.custom
- @sonata.media.filesystem.local
- @sonata.media.cdn.server
- @sonata.media.generator.default
- @sonata.media.thumbnail.format
- ['jpg', 'png']
- ['image/pjpeg', 'image/jpeg', 'image/png', 'image/x-png']
- @sonata.media.adapter.image.imagick
- @sonata.media.metadata.proxy
calls:
- [ setTemplates, [{helper_view:SonataMediaBundle:Provider:view_image.html.twig,helper_thumbnail:SonataMediaBundle:Provider:thumbnail.html.twig}]]
Application\Sonata\MediaBundle\Provider\CustomImageProvider.php
:
<?php
namespace Application\Sonata\MediaBundle\Provider;
use Sonata\CoreBundle\Validator\ErrorElement;
use Sonata\MediaBundle\Model\MediaInterface;
use Sonata\MediaBundle\Provider\ImageProvider;
class CustomImageProvider extends ImageProvider
{
public function validate(ErrorElement $errorElement, MediaInterface $media)
{
throw new \Exception();
}
}
config.yml
:
sonata_media:
contexts:
image:
providers:
- sonata.media.provider.custom
formats:
small: { width: 100 , quality: 70}
big: { width: 500 , quality: 70}
但validate
方法仍未被调用。
因此,当我尝试加载GIF图像时,出现错误:
Length of either side cannot be 0 or negative, current size is x
我错过了什么吗?
更新
可以在SomeEntityAdmin
类中添加简单验证,如下所示:
public function validate(ErrorElement $errorElement, $object)
{
/** @var Media $image */
$image = $object->getImage();
if (!in_array($video->getContentType(), ['image/pjpeg', 'image/jpeg', 'image/png', 'image/x-png'])) {
$errorElement
->with('image')
->addViolation('Invalid file type')
->end()
;
};
}
但如果你想验证一批上传的图片,这不是一个好的解决方案。