VichUploderBundleで更新時に画像が反映されない問題
前回に引き続きVichUploaderBundleネタです。
今回は更新時に画像を変更しても反映されなかった問題が発生していたので、それについて調べたことを書いていこうと思います。
更新時に画像が反映されない
新規登録時にフォームから画像をアップロードすると、画像は登録できます。
ただ画像を変更しようと思って編集画面から再度画像をアップロードしたところ反映されませんでした。
一体何が原因だったのか・・・。
アップロードが行われるプロセスを確認してみる
VichUploderBundleがどのようにアップロードをしているのか?
使う側としては気にしなくていい部分なですが、念のため確認してみました。
確認してみるとここに記載されてました。
preUpdateが実行されてないとダメ
画像をアップロードしているので、エンティティに変更があるからpreUploadイベントが実行されると思ったら、画像の変更じたいはもともとDoctrineのpreUploadイベントが発行されてから画像のアップロードやファイル名をエンティティに保持する処理が実行されるので、画像以外の項目に変更がないとダメっぽいです。
更新日とかで大丈夫じゃない?
確かに更新日を設定すればいいんですよね。
大体のテーブル構成において、登録日と更新日は持っていますしね。
ただ僕の場合はDoctrineExtension
のTimestampable
を使っていたのでこれもエンティティに変更がないとイベント発行されないので、ダメでした・・・。
対処法
結局エンティティが少しでも変化すればいいので更新日
に現在の時刻を設定するようにしました。
まとめ
- VichUploderBundleは更新時はDoctrineのpreUpdateイベントでファイルアップロードが実行される
- Entityは値が変化しないとそもそも
preUpdate
が実行されない - 画像に変更がある場合はかならずEntityの値を更新させる必要がある