質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Blade

Bladeとは、 PHPフレームワークのLaravelで使用することができるテンプレートエンジンです。テンプレートの継承とエスケープ機能を提供します。

Q&A

0回答

999閲覧

laravelでgetアクセス後のリダイレクトでurlが変更されない

kawataku

総合スコア3

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Blade

Bladeとは、 PHPフレームワークのLaravelで使用することができるテンプレートエンジンです。テンプレートの継承とエスケープ機能を提供します。

0グッド

0クリップ

投稿2022/03/19 07:04

前提

laravelでsnsっぽいアプリを作成している者です。
いいね機能を作成しようと思っているのですが、上手くいってない状態です。

実現したいこと

  • 画面A -> 画面B -> 画面Aのような画面遷移をさせたい

  • 画面Aから画面Bへはpost処理はさせずに、getアクセスのみをさせたい

  • 画面Bにアクセスしたら、画面Aにリダイレクトさせたい

  • post処理を使わずに、getのみでできるようにしたい(postでも実現できるが、できるならgetでの実現方法を学びのために知りたいため)

  • どなたかよろしくお願い致します。

発生している問題・エラーメッセージ

  • 画面Aから画面Bにリンクを貼って、画面遷移させた後に、処理を行わせたら、再び画面Aにリダイレクトさせたいです。
  • しかし、ここで画面描画は変わるのですが、urlが画面Bのままです。
  • 以下のような挙動になってしまいます。
  • いいねを押したとき(いいねを追加したいとき)

イメージ説明

  • いいねを取り消したいとき

イメージ説明

  • 無限ループに陥っているのかなと思うのですが、どの部分が原因かは見当がつかない状態です。

該当のソースコード

  • MemoGoodController.php

php

1class MemoGoodController extends Controller 2{ 3 /** 4 * メモのいいね機能 5 * @param String $memoId 6 * @return \\Illuminate\\Http\\RedirectResponse 7 */ 8 public function like(String $memoId): RedirectResponse 9 { 10 $user = app(User::class); 11 $userId = $user->getAuthAccountId(); 12 13 $memoGood = MemoGood::onlyTrashed()->where("memo_id", $memoId)->where("user_id", $userId)->first(); 14 if ($memoGood) { 15 $memoGood->restore(); 16 $memoGood->user_id = $userId; 17 $memoGood->memo_id = $memoId; 18 $memoGood->updated_at = Carbon::now(); 19 } else { 20 $memoGood = new MemoGood(); 21 $memoGood->user_id = $userId; 22 $memoGood->memo_id = $memoId; 23 $memoGood->created_at = Carbon::now(); 24 $memoGood->updated_at = Carbon::now(); 25 } 26 27 $memoGood->save(); 28 29 return redirect()->back(); 30 } 31 32 /** 33 * メモのいいねを取り消す機能 34 * @param String $memoId 35 * @return \\Illuminate\\Http\\RedirectResponse 36 */ 37 public function unlike(String $memoId): RedirectResponse 38 { 39 // TODO: 削除のときに、なぜか複数のレコードが登録されてしまう(37個くらい) 40 $user = app(User::class); 41 $userId = $user->getAuthAccountId(); 42 43 $memoGood = MemoGood::where("memo_id", $memoId)->where("user_id", $userId)->first(); 44 if ($memoGood) { 45 $memoGood->delete(); 46 } 47 48 return redirect()->back(); 49 } 50 51} 52
  • show.blade.php

html

1@if ($memoLike) 2 <p>hello</p> 3 <a href="{{ route('memo_unlike', $memo->id) }}" class="btn btn-success btn-sm"> 4 いいね 5 <span class="badge"> 6 {{ $memo->memoGoods->count() }} 7 </span> 8 </a> 9@else 10 <p>world</p> 11 <a href="{{ route('memo_like', $memo->id) }}" class="btn btn-success btn-sm"> 12 いいね 13 <span class="badge"> 14 {{ $memo->memoGoods->count() }} 15 </span> 16 </a> 17@endif 18
  • MemoController.php

php

1/** 2 * メモの詳細画面 3 * @param Illuminate\Http\Request $request 4 * @param \App\Models\Memo $memo 5 * @return Illuminate\View\View 6 */ 7public function show(Request $request, Memo $memo) 8{ 9 $user = app(User::class); 10 $userId = $user->getAuthAccountId(); 11 12 $memoLike = MemoGood::where('memo_id', $memo->id)->where('user_id', $userId)->first(); 13 return view('memos.show', [ City::CITY_ID_NAME => $request->cityId, Memo::MEMO_ID_NAME => $memo, MemoGood::MEMO_LIKE => $memoLike ]); 14}
  • web.php

php

1Route::get('/memo_like/{id}', [MemoGoodController::class ,'like'])->name('memo_like'); 2Route::get('/memo_unlike/{id}', [MemoGoodController::class, 'unlike'])->name('memo_unlike');

試したこと

  • redirect()->back()じゃなく、url()->previous()を使ってみましたが、動作は変わらずでした。
  • メモのいいね機能だけでなく、別のページである「mypage → リンク先 → mypage」でも同じ状況になる
  • 「mypage → リンク先 → memos.index」などでも同じ状況になる
  • redirect()->back()じゃなく、redirect()->route('mypage')などでも、同じ状態になる
  • リダイレクト先をhttps://google.comなどの外部サイトにしたら、上手く動作するが、自分のアプリ内のurlだと上手く動作しない
    • 以下リダイレクト先をgoogle.comにした場合

イメージ説明

補足情報(FW/ツールのバージョンなど)

  • Intel MacOS 12.2.1
  • laravel 8.78.0
  • laravel-breeze
  • docker
  • vscode

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問