ボタンをクリックしたユーザーとのルームを作成、そのままルームに飛ばす。という処理を実装しています..
vue.jsのaxiosで送信しています。
解決したいこと: axiosのpostの後にそのままコントローラー側のリダイレクトでページ遷移させたいです。
現状: vue側に戻ってしまうのでパスを作り、window.location.hrefを使って無理やり遷移している感じがします。
vue
1 build_room(login_user_id,id) { 2 var array = ["http://127.0.0.1:8000/user/", id, "/room"]; 3 // パスをjoinで結合 4 const t = array.join('') 5 axios.post(t).then(res => { 6 let user_id = res.data 7 var array = ["http://127.0.0.1:8000/user/", login_user_id, "/room_redirect/", user_id]; 8 // パスをjoinで結合 9 const url = array.join('') 10 window.location.href = url 違和感ポイントです。 11 }).catch(function(error) { 12 console.log(error) 13 }) 14 }
controller
1 public function create(User $user) 2 { 3 $login_user = Auth::user(); 4 if(!$login_user->isMessaged(Auth::id(), $user->id)) { 5 $room = new Room(); 6 $hash = $login_user->id + $user->id; 7 $room->name = Hash::make($hash); 8 $room->save(); 9 $room->users()->attach([$login_user->id, $user->id]); 10 return $user->id; 11 } 12 }
試したこと
コントローラー側でreturnをリダイレクトに設定。 -> ページ遷移せず。 コンソールにはhtmlが表示される。 return $user->id; 変更前 return redirect()->route('message_room_redirect', ['user' => $login_user->id, 'another_user' => $user->id]); 変更後
axiosでpostしてしまうとコントローラー側のリダイレクトは効かなくなってしまいます。vue側に返り値が帰ってくるので返り値を使いその後に再度遷移させる流れになっていますが、vueに帰らずにそのままコントローラー側でリダイレクト(遷移)できないのだろうか?と考えています。
axiosのpostで送信後に、コントローラー側でそのまま(viewに)リダイレクトさせる方法はないのでしょうか?
お分かりになる方がいましたら、ご教授いただきたいです。
よろしくお願いいたします。
vue.js 2.6.11
laravel 7系
あなたの回答
tips
プレビュー