Vue.jsとlaravelで画像複数枚投稿の編集を実装しています。編集する際に新規ではなく変更された写真については送信する写真の情報にedit_image_idを使って変更する(元の)写真を取得、更新処理をしようと思っています。
解決したいこと: laravel側でedit_image_idを$imageの中のデータとして受け取りたい。
現状:
vueのdataformではedit_image_idが入っていることを確認出来ました。
しかし、laravel側で$imageの中にはedit_image_idの情報が入っていませんでした。
怪しいと感じる部分:
下にコードを載せましたが、自分がlaravelに送っている情報(img)と、実際にコントローラーで受け取っている情報($image)に違いがありました。この部分が怪しいと思うのですが、理解が乏しく解決できませんでした。
vue
1 data() { 2 return { 3 images: [] 4 } 5 }, 6 7 ...省略 8 9 const reader = new FileReader(); 10 reader.onload = (e) => { 11 edit_image.thumbnail = e.target.result; 12 edit_image.edit_image_id = img.id; 13 this.images.splice(i, 1, edit_image); 14 }; 15 16 ...省略 17 18 dataform = new FormData(); 19 20 this.images.forEach(function(img) { 21 if(img.thumbnail) { 22 dataform.append('images[]', img); 23 } else { 24 return false; 25 } 26 }) 27 ...省略 28 29 let id = this.me_id 30 var array = ["http://127.0.0.1:8000/me/", id, "/update"]; 31 let path = array.join('') 32 axios.post(path, dataform).then(res => { 33 console.log('done') 34 }).catch(function(error){ 35 console.log(error) 36 })
controller
1foreach($request->images as $image) { 2 var_dump($image); 3}
以下の2つの部分が中身のデータ情報です。
送信側,受け取り側
imgの中身(送信) File {thumbnail: "data:image/jpeg;base64,/9j/4***Z", edit_image_id: 20, name: "5e0bf50ab91***", lastModified: 1561089569815, lastModifiedDate: Fri Jun 21 2019 12:59:29 GMT+0900 (日本標準時), …} name: "5e0bf50ab91***" lastModified: **** lastModifiedDate: ** webkitRelativePath: "" size: 500862 type: "image/jpeg" thumbnail: "data:image/jpeg;base64,/9j/4**" edit_image_id: 20 ここで取得できている __proto__: File
$imageの中身(受け取り) $image => Illuminate\Http\UploadedFile {#337 path: "/private/var/folders/kj/jv_***", filename: "phpqHh5jN", basename: "phpqHh5jN", pathname: "/private/var/folders/kj/jv_***", extension: "", realPath: "/private/var/folders/kj/jv_***", aTime: 2020-07-14 21:18:57, mTime: 2020-07-14 21:18:57, cTime: 2020-07-14 21:18:57, inode: 20893833, size: 500862, perms: 0100600, owner: 501, group: 20, type: "file", writable: true, readable: true, executable: false, file: true, dir: false, link: false, }
下記の様に考えてみましたが、解決策が見つからない状態です。
$imageはfileオブジェクトとして存在している。
中身の情報を比較すると、送信した際にimgの情報がそっくりそのまま$imageに送られているわけじゃなさそう?
$image->edit_image_id こんな形で使うのを想定しています。
どなたかお分かりになる方居ましたら、知恵を貸していただきたいです。
よろしくお願いいたします。
laravel 6.18
vue.js 2.6.11
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/15 21:38
2020/07/16 01:26
2020/07/18 02:45