Laravel5.6, 5.7 Voyager Mediaから保存済み画像を更新しよう!

Laravel5.6, 5.7 Voyager Mediaから保存済み画像を更新しよう!

こんばんは、のるぼるのんです。

前回までの記事ではLaravel5.6, 5.7 Voyagerで記事の名前を維持したままアップロード日本語ファイル名を維持したままアップロードを行う方法を紹介しました。

 

今回はVoyagerのメディア機能のアップロードから既にアップロードしている画像を更新してみましょう。

基本的なイメージとしては、元ファイル名取得→元ファイル名と同名のファイルをアップロードした時画像を更新する、という感じです。

 

今回の記事の内容では、VoyagerMediaControllerを編集することになります。

ですのでまず先にVoyagerのコントローラーをvendor外に出し、編集可能にしましょう。

 

それでは早速、ファイルを編集していきます。

今回いじるのはVoyagerMediaController.php/uploadメソッドです。

元ファイルではこんな感じ。

store関数ではファイル名をランダムにしているので、画像の更新ができません。

ですので、元ファイル名を取得し、storeAs関数で保存します。

 

vendor外に出したVoyagerMediaControllerのuploadメソッドをオーバーライドします。

 

基本的にはこれだけです!getClientOriginalName()で元ファイルのファイル名取得→元ファイル名と同名のファイル削除→storeAsで元ファイル名で保存、という流れです。

 

元ファイル名で削除の流れを組みこまないと、hoge.png1のような名前で保存されます。

日本語ファイルを挙げる場合、以前の記事で紹介したsetLocaleを挟むことで、表示確認です。今回の改造ではbasename関数を経由していないので、保存自体はマルチバイト文字でもうまくいきます。

 

また、VoyagerMediaControllerではstorage以下、閲覧できるディレクトリなどを

とすることで編集できます。この例ですと/posts以下のファイルをメディアでいじれる感じですね。

一時的なファイル置き場は見せたくないよって時はこちらである程度対応可能かな、と思います!(Bread TinyMCEのパス変更やcsvをインサートできるようにするなど、一時ディレクトリってマジ便利。。。)

 

余談ですが。

最近Voyagerも更新があって、ウィジェットなどはデフォルトで表示されなくなったみたいですね。

Laravel + Voyagerは色々便利なので、機能確認をしっかりしていきたいところです。今話題に出したので、ウィジェット関係もそのうち記事にしたいですね。

あと、Voyagerは機能がしっかりしてて、正直かなりいい感じなんですけど、たまに重いんですよね。

Voyagerくらい便利で、サクサクな管理画面パッケージはないか、今後試していきたいと思います。その時はまた、記事として共有させていただきます。

Laravelカテゴリの最新記事