[実現したい事]
Vue3で作成したformの情報をaxios経由でLaravel DBへ保存したい。
[問題点]
DBへ保存できているのですが、
下記のエラーがLaravel Telescopeより確認できています。
上記Telescopeエラーの見方を教えてください。
なぜ「POST /api/images 」が二つあり、一つで500のエラーが出ているのか?
「POST /api/images 」が二つある要因もよくわかりません。
処理の流れは、
1.Vue側で作成したformの内容をaxios api経由でlaravelへPOST
2.Laravel側でformの情報をaxios経由で受け取りDBへ保存
3.保存処理が終わると別のページへリダイレクト
となっています。
Laravelルートの処理は以下です。
api.php
1//formの作成ページ 2Route::get('api/images', 'ImageApiController@index')->name('images.index'); 3 4//formからの情報をDBに保存メソッドのルート 5Route::post('api/images', 'ImageApiController@store');
DB保存完了後のリダイレクト先ルート処理
web.php
1Route::get('show','HomeController@show')->name('show');
・Laravel側、データを受け取ってDBへ保存するstoreメソッド内にaxios経由の情報がNull。受け取れていません。(dd($)で確認済み)
[問題のコード]
formの情報をaxiosからPOSTする際は以下のコードを書いています。
FormData() に値が入っていない事が原因かと思い、いろんな箇所でconsole.log()してみると、全ての箇所で値が取得できています。
Vue.js
1〜〜省略〜〜 2 3 //new FormData() を作成 4 const data = new FormData(); 5 data.append("canvas", blob, "image/png"); 6 data.append("title", title.value); 7 data.append("comment", comment.value); 8 9 console.log(data.get("canvas")); 10 console.log(data.get("title")); 11 console.log(data.get("comment")); 12 console.log(data); 13 14 axios 15 .post("/api/images/", data, { 16 headers: { "content-type": "multipart/form-data" }, 17 }) 18 .then(res=> { 19 console.log("success"); 20 }) 21 .catch(error => { 22 new Error(error); 23 }); 24 }; 25
Laravelデータを受け取って保存するstoreメソッドは以下の様に書いています。
request()-> の値がすべてnullになっています。
public function store(Request $request, Image $image, TwitterOAuth $twitter) { /** * *Imageクラス、TwitterOAuthクラスはAppServiceProvider.phpに登録しています。 * */ //ログインユーザーのIDを保存 $image->user_id = auth()->user()->id; //タイトル保存処理 $image->title = request()->title; //コメント保存処理 $image->comment = request()->comment; //AWS S3画像保存処理 $file_name = request()->canvas; $path = Storage::disk('s3')->putFile('/', $file_name, 'public'); $image->image = $path; $image->save(); return redirect()->route('show', compact('image'))->with('message', '投稿を作成しました'); }
POST後にブラウザから
Symfony\Component\Debug\Exception\FatalThrowableError
Call to a member function hashName() on null
http://127.0.0.1:1180/api/images
となっており、該当のソースコードは
vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php:240
return $this->putFileAs($path, $file, $file->hashName(), $options);
app/Http/Controllers/ImageApiController.php:55
$path = Storage::disk('s3')->putFile('/', $file_name, 'public');
となっております。

回答1件
あなたの回答
tips
プレビュー