最近VichUploderBundleでハマるポイントがいくつかあるのでメモしておく。
Uploadableの設定忘れ
これ本当によくやってしまう。。。
ちゃんと@Vich\ Uploadable
を書かないとだめ。。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
namespace Acme\DemoBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\HttpFoundation\File\File;
use Vich\UploaderBundle\Mapping\Annotation as Vich;
/**
* @ORM\Entity
* @Vich\Uploadable
*/
class Product
{
...
|
enctypeの設定忘れ
Twigでform_start
使えばいいんだろうけど、formタグを書かなければ行けないときによくenctype="multipart/form-data"
の指定を忘れてアップロードされない。。
がんばろう・・・。
Entityに変換がない場合
画像の変更とかするときに良く発生するんだけど、Entityに何かしらの変更がない場合はEntityManger::flash()
とかしても更新されない・・・。
画像のみ変更する場合なんかは同時にupdatedAtみたいな項目のカラムを明示的にEntityManger::flash()
まえに更新する必要がある。
詳しくはVichUploaderBundleのドキュメントを読んでほしい。
VichUploaderBundle/known_issues.md at master · dustin10/VichUploaderBundle · GitHub
僕なりの解決策
FormTypeのaddModelTransformerを使ってformのなかでupdatedAt的な更新日のプロパティを更新してあげるようにしている。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
class EditUploadType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('imageFile', FileType::class,[
'label' => '画像',
'required' => true,
]);
$builder->addModelTransformer(new CallbackTransformer(function($data){
return $data;
}, function(Banner $data){
$data->updatedAt = new \DateTime();
}));
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => Banner::class,
]);
}
}
|
最後に
- たまに使うと忘れていることが多いVichUploaderBundleですが、非常に便利なのでこれからも積極的に活用しようと思います。