1

SonataAdmin で VichUploaderBundle をセットアップしましたが、sonata を使用してエンティティのアップロード画像を分類したくありません。

フォームは正常にレンダリングされ、エンティティは正常に保存され、マルチパート データと共に送信され、画像が存在します。しかし、それは保存されておらず、これをデバッグするエラーや何かはありません。

構成:

vich_uploader:
db_driver: orm
mappings:
    category_image:
        uri_prefix: /uploads/images/category
        upload_destination: %kernel.root_dir%/../web/uploads/images/category
        inject_on_load: true
        delete_on_remove: true
        delete_on_update: true
        namer: vich_uploader.namer_origname

カテゴリ管理者:

        $formMapper
        ->add('title', 'text', ['label' => 'title'])
        ->add('description', 'textarea', ['required' => false, 'label' => 'description'])
        ->add('image', 'file',
            [
                'required' => false,
                'label' => 'image',
                'data_class' => 'Symfony\Component\HttpFoundation\File\File',
                'attr' => ['class' => 'sonata-medium-file'],
            ]
        );

カテゴリエンティティ:

/**
 * @ORM\Column(type="string", length=255, name="image_name", nullable=true)
 */
protected $imageName;
/**
 * @Assert\File(
 *     groups={"list"},
 *     maxSize="500k",
 *     mimeTypes={"image/png", "image/jpeg", "image/pjpeg"},
 *     mimeTypesMessage = "constraint.mime_type"
 * )
 * @Vich\UploadableField(
 *     mapping="category_image",
 *     fileNameProperty="imageName"
 * )
 * @var File $image
 */
protected $image;

投稿: コンテンツ

Content-Disposition: form-data; name="s5519586317457[image]"; filename="ico.png"

コンテンツ タイプ: 画像/png

ファイルフォーム

4

1 に答える 1

2

VichUploaderBundle と Doctrine について知っておくべきことが 2 つあります。

  • フォームによって更新された唯一のフィールドがファイルである場合、Doctrine は変更を検出せず、永続化されません (このリンクでは、その理由と回避方法が説明されています)。
  • バンドルは、オブジェクトがアップロード可能なフィールドに存在する場合にのみアップロード メカニズムをトリガーするため、フィールドのオプションをSymfony\Component\HttpFoundation\File\UploadedFile定義するdata_classとそれが壊れます (安全に削除できます)。

NB : エンティティが次のように定義されていることを確認することもできます。@Vich\Uploadable

于 2015-03-30T17:23:12.837 に答える