環境
Laravel5.8
PHP7.2
Nigix
データベースからデータを取得し、forelseで一覧表示するプログラムを作っています。
一部分に特定のプロパティが存在するか否かで、URLと表示を変える分岐があります。$post->id、$post->liked_idをパラメータとしてルーティングに渡しています。(Twitterのいいね機能のようなものです)
index.blade.php
1@forelse($posts as $post) 2 <div class="card"> 3 <div class="card-body"> 4 <div class="card-text"> 5 <a href="{{url('posts/'.$post->id)}}">{{$post->body}</a> 6 <p>{{$post->updated_at}}</p> 7 </div> 8 </div> 9 // 省略、以下問題のコード 10 @auth 11 @if(empty($post->liked_id)) 12 <a href="{{url('posts/'.$post->id.'/likes')}}" class="" 13 onClick="event.preventDefault(); 14 document.getElementById('like-store-form').submit();"> 15 <i class="far fa-heart"></i> 16 {{$post->likes->count()}} 17 </a> 18 <form id="like-store-form" action="{{url('posts/'.$post->id.'/likes')}}" method="POST"> 19 @csrf 20 @method('POST') 21 </form> 22 @else 23 <a href="{{url('posts/'.$post->id.'/likes/'.$post->liked_id)}}" class="" 24 onClick="event.preventDefault(); 25 document.getElementById('like-delete-form').submit();"> 26 <i class="fa fa-heart"></i> 27 {{$post->likes->count()}} 28 </a> 29 <form id="like-delete-form" action="{{url('posts/'.$post->id.'/likes/'.$post->liked_id)}}" method="post"> 30 @csrf 31 @method('DELETE') 32 </form> 33 @endif 34 @else 35 <i class="far fa-heart"></i> 36 {{$post->likes->count()}} 37 @endauth 38 </span> 39 </div> 40 </div> 41 </div> 42 //省略 43 @endforelse 44 {{$posts->links()}} 45
Route::post('/posts/{post_id}/likes','LikeController@store'); Route::delete('/posts/{post_id}/likes/{like_id}','LikeController@destroy');
しかし、ブラウザに表示されるURLは変化しているのに、ルーティングには本来のものとは違う値が渡されているようです。
具体的に言えば、どの投稿のURLにアクセスしても、ページの一番上の投稿のpost_idがパラメータとして渡されて処理が実行されているようです。
これは一体何が起きているのでしょうか。恥ずかしいことに検索ワードすらわからず、「ルーティング 違う値」などをググっても解決方法が出てきませんでした。よろしければアドバイスいただけると幸いです。
備考
・別のページ(forelseによる一覧表示を行わないページ)から同じURLにアクセスしたところ、正確なパラメータが渡され意図した通りの処理を実行しました。
・dd();でコントローラ内を確認してみたのですが、コントローラに引数として渡したときには、違うパラメータが渡されていました。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。