私のDataTransformerを使用して、base64文字列をfileSystemイメージに変換したいと考えています。symfony:Dependency Injectionを使用してformTypeのDataTransformerを使用する
私のコード:
services:
lion_visionomie_media_bundle_base64_data_transformer:
class: Lion\Visionomie\MediaBundle\Transformer\Base64DataTransformer
arguments: ['@sonata.media.generator.default', '@sonata.media.manager.media', '@sonata.media.pool', '@doctrine.orm.entity_manager']
lion_visionomie_media_bundle_slide_type:
class: Lion\Visionomie\MediaBundle\Form\SlideType
arguments: ['@lion_visionomie_media_bundle_base64_data_transformer']
tags:
- {name: form.type}
class Base64DataTransformer implements DataTransformerInterface
{
/**
* @var GeneratorInterface
*/
private $pathGenerator;
/**
* @var MediaManager
*/
private $mediaManager;
/**
* @var Pool
*/
private $pool;
/**
* @var EntityManagerInterface
*/
private $entityManager;
public function __construct(GeneratorInterface $generator, MediaManager $mediaManager, Pool $pool, EntityManagerInterface $entityManager)
{
$this->pathGenerator = $generator;
$this->mediaManager = $mediaManager;
$this->pool = $pool;
$this->entityManager = $entityManager;
}
/**
* @param mixed $value
* @return mixed
*/
public function transform($value)
{
// [...]
return $media;
}
/**
* @param mixed $value
* @return mixed
*/
public function reverseTransform($value)
{
/** @var Media $media */
$media = $value;
return base64_encode(file_get_contents($media->getPreviousProviderReference()));
}
}
class SlideType extends AbstractType
{
/**
* @var Base64DataTransformer
*/
private $base64DataTransformer;
public function __construct(Base64DataTransformer $base64DataTransformer)
{
dump($base64DataTransformer);
die;
$this->base64DataTransformer = $base64DataTransformer;
}
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('name')
->add('active')
->add('background')
->addModelTransformer($this->base64DataTransformer)
->add('thumbnail')
;
}
私の現在の問題はSlideTypeでbase64DataTransformer変数がnullであること、です。
なぜこのヌルですか?
おそらく私はSlideTypeでContainerAwareInterfaceを使用できます。しかし、私はDataTransformerクラスに自分の依存関係を手動で入れたくありません。
、一度はいただきました!間違っているあなたがすべき見つけますビルダー追加チェーンの外側にモデルトランスを取り付けます。 ($ this-> base64DataTransformer); ' – Akash
さて、FOSRestControllerにFormBuilderを使ってFormを作成しようとしました。現在、ApiDoc Annotationsを使用してREST-Servicesをテストするサンドボックスを生成しています。私は入力値に問題があります:input = "Lion \ Visionomie \ MediaBundle \ Form \ SlideType" 今、どのパラメータを私のコントローラに渡すべきかわかりません。さらに、私はそれが回避策だと思います。フォームをカスタムクラスでラップするか、それをsymfony開発者グループに報告する必要があると思いますか? –
FOSRestBundleを使用していることに気づいていませんでしたが、フォームをどのようにインスタンス化していますか? – Akash