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
今、私はアイデアがありません。他に何を試すことができますか?