Sonata Media - 管理员中的文件扩展名验证

时间:2018-01-23 13:58:27

标签: php symfony sonata-admin sonata-media-bundle

我只想在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()
        ;
    };
}

但如果你想验证一批上传的图片,这不是一个好的解决方案。

0 个答案:

没有答案