1

SonataMediaBundle の画像プロバイダーをオーバーライドしたいのですが、オーバーライドすると、コンストラクターが呼び出されたときにエラーが発生します。

Catchable Fatal Error: Argument 8 passed to Application\Sonata\MediaBundle\Provider\NewImageProvider::__construct() must be an instance of Imagine\Image\ImagineInterface, none given

これはコンストラクタです:

/**
 * @param string                                                $name
 * @param \Gaufrette\Filesystem                                 $filesystem
 * @param \Sonata\MediaBundle\CDN\CDNInterface                  $cdn
 * @param \Sonata\MediaBundle\Generator\GeneratorInterface      $pathGenerator
 * @param \Sonata\MediaBundle\Thumbnail\ThumbnailInterface      $thumbnail
 * @param array                                                 $allowedExtensions
 * @param array                                                 $allowedMimeTypes
 * @param \Imagine\Image\ImagineInterface                       $adapter
 * @param \Sonata\MediaBundle\Metadata\MetadataBuilderInterface $metadata
 */
public function __construct($name, Filesystem $filesystem, CDNInterface $cdn, GeneratorInterface $pathGenerator, ThumbnailInterface $thumbnail, array $allowedExtensions = array(), array $allowedMimeTypes = array(), ImagineInterface $adapter, MetadataBuilderInterface $metadata = null)
{
    parent::__construct($name, $filesystem, $cdn, $pathGenerator, $thumbnail, $allowedExtensions, $allowedMimeTypes, $metadata);

    $this->imagineAdapter = $adapter;
}

ご覧のとおり、引数 8 にはインターフェイスが必要です。現在、私のサービスでは、8 番目の引数を渡していません。

sonata.media.provider.image:
         class: %application_sonata_media.image_class%
         arguments:
            - [sonata.media.provider.image]
            - [@sonata.media.filesystem.local]
            - [@sonata.media.cdn.server]
            - [@sonata.media.generator.default]
            - [@sonata.media.thumbnail.format]
            - [@sonata.media.buzz.browser]
            - [@sonata.media.metadata.proxy]
         tags:
            - { name: sonata.media.provider }
         calls:
                       - [ setTemplates, [ { helper_thumbnail: SonataMediaBundle:Provider:thumbnail.html.twig, helper_view: SonataMediaBundle:Provider:view_youtube.html.twig } ] ]

たとえば(=配列指定)など、さまざまな方法で渡そうとしました:

     arguments:
        - [sonata.media.provider.image]
        - [@sonata.media.filesystem.local]
        - [@sonata.media.cdn.server]
        - [@sonata.media.generator.default]
        - [@sonata.media.thumbnail.format]
        - [@sonata.media.buzz.browser]
        - [@sonata.media.metadata.proxy]
        - [imagine_interface]

インターフェイスをロードする新しいサービスを作成しようとしました。

test.imagine:
   class: Imagine\Image\ImagineInterface

sonata.media.provider.image:
     class: %application_sonata_media.image_class%
     arguments:
        - [sonata.media.provider.image]
        - [@sonata.media.filesystem.local]
        - [@sonata.media.cdn.server]
        - [@sonata.media.generator.default]
        - [@sonata.media.thumbnail.format]
        - [@sonata.media.buzz.browser]
        - [@sonata.media.metadata.proxy]
        - [@test.imagine]
     tags:
        - { name: sonata.media.provider }
     calls:
                   - [ setTemplates, [ { helper_thumbnail: SonataMediaBundle:Provider:thumbnail.html.twig, helper_view: SonataMediaBundle:Provider:view_youtube.html.twig } ] ]

次に、エラーが発生しました:

Cannot instantiate interface Imagine\Image\ImagineInterface

今、私はアイデアがありません。他に何を試すことができますか?

4

1 に答える 1