カスタム プロバイダーの記述方法については、公式ドキュメントに例がありますが、機能しません。
私の質問は、カスタム プロバイダーを作成する最良の方法、特にプロバイダーを作成して新しいサービスとして登録する方法を教えてください。
ドキュメントからこのコードを使用しようとすると、引数の型に関するエラーが発生します。空論 とはどういう意味ですか?
ありがとうございました。
カスタム プロバイダーの記述方法については、公式ドキュメントに例がありますが、機能しません。
私の質問は、カスタム プロバイダーを作成する最良の方法、特にプロバイダーを作成して新しいサービスとして登録する方法を教えてください。
ドキュメントからこのコードを使用しようとすると、引数の型に関するエラーが発生します。空論 とはどういう意味ですか?
ありがとうございました。
いくつかの調査の後、次のコードが機能します。
プロバイダーをサービスとして登録します。
// src/Application/Sonata/MediaBundle/Resources/config/services.yml
parameters:
application_sonata_media.custom_class: Application\Sonata\MediaBundle\Provider\CustomProvider
services:
sonata.media.provider.custom:
class: %application_sonata_media.custom_class%
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
カスタム プロバイダー コード:
// src/Application/Sonata/MediaBundle/Provider/CustomProvider.php
<?php
namespace Application\Sonata\MediaBundle\Provider;
use Sonata\MediaBundle\Model\MediaInterface;
use Sonata\MediaBundle\Provider\FileProvider;
use Symfony\Component\Form\FormBuilder;
use Symfony\Component\HttpFoundation\File\File;
/**
* Class CustomProvider
* @package Application\Sonata\MediaBundle\Provider
*/
class CustomProvider extends FileProvider
{
/**
* @param MediaInterface $media
*/
protected function doTransform(MediaInterface $media)
{
// ...
}
/**
* {@inheritdoc}
*/
public function generatePublicUrl(MediaInterface $media, $format)
{
// new logic
}
/**
* {@inheritdoc}
*/
public function postPersist(MediaInterface $media)
{
}
/**
* {@inheritdoc}
*/
public function postUpdate(MediaInterface $media)
{
}
}
ソナタ構成の更新:
// app/config/sonata/sonata_media.yml
sonata_media:
...
product:
providers:
- sonata.media.provider.image
- sonata.media.provider.custom
formats:
small: { width: 40 , quality: 100}
...
また、自動ロードするように DI 拡張機能をセットアップしましたservices.yml
古いドキュメントを更新するためにPRを作成しました。
オーバーライドしていたサービスとまったく同じ名前をサービスに付けるまで、これを機能させることができませんでした(sonata.media.provider.image)