Laravelにてパラメーターを再取得してリダイレクトする方法
解決したいこと
投稿内容にコメント(送信ボタンを押)した際に、同じページにリダイレクトしたのですが、「Missing required parameter for [Route: reply] [URI: index/{id}] [Missing parameter: id].」のエラーが出てリダイレクトできません。
リダイレクトできるようにしたいです。
<詳細>
現在、LaravelでTwitterのようなアプリを作っています。
投稿した内容にコメントをする際に、再度同じページをリダイレクトしたく、コントローラーでリダイレクトの指示を出したのですが、リダイレクト先のルートが「Route::get('/index/{id}',[HomeController::class, 'reply'])->name('reply');」となっており、{id}の部分が取得できず、「Missing required parameter for [Route: reply] [URI: index/{id}] [Missing parameter: id].」のエラーが出ています(そう言う意味だと思っています)。
どのようにしたら、{id}をうまく再取得できますでしょうか。
お知恵をお貸しいただけますと幸いです。
HomeController.php (必要そうなところのみ抜粋)
public function index(){
$records = \DB::table('users')
->join('records', 'records.user_id','=','users.id')
->join('profiles', 'profiles.user_id','=','users.id')
->select('records.*','users.*','profiles.*','records.id')
->whereNull('records.deleted_at')
->orderBy('records.updated_at' ,'DESC')
->get();
return view('index' , compact('records'));
}
public function reply($id){
$rep = Record::find($id);
$records = \DB::table('users')
->join('records', 'users.id','=','records.user_id')
->where('records.id','=', $rep['id'] )
->whereNull('records.deleted_at')
->orderBy('records.updated_at', 'DESC')
->get();
// dd($records);
return view('index', compact('records'));
}
// ↓ コメント内容を保存
public function comment_store(Request $request){
$posts = $request->all();
Reply::insert([
'host_id' => $posts['host_id'], 'user_id' => \Auth::user()->id ,'comment' => $posts['comment'] ]);
$host_id = $posts['host_id'];
//dd($posts);
return redirect()->route('reply') ;
}
wep.php(ルーティング、必要そうなところのみ抜粋)
//index
Route::get('/index', [HomeController::class, 'index'])->name('index');
//reply
Route::get('/index/{id}',[HomeController::class, 'reply'])->name('reply');
Route::post('/comment_store', [HomeController::class, 'comment_store'])->name('comment_store');
index.blade.php
@foreach( $records as $record )
<div class="card my-4 ">
<div class="row bg-dark bg-opacity-25 row mx-0 py-3">
<h4 class="col-md-2"> user picture</h4>
<h4 class="col-md pt-3">{{ Auth::user()->name }}</h4>
</div>
<div class="m-3 ">
<form action="{{ route('comment_store') }}" method="post">
@csrf
<div class="row">
<p class="col-md pt-2"> {{ $record->name }}さんの投稿にコメントする </p>
<input type="hidden" name="host_id" value="{{ $record->id }}">
</div>
<textarea name="comment" id="" cols="30" rows="5" class="form-control"></textarea>
<input type="submit" name="submit" value="送信" class="form-control w-25 float-end bg-primary text-white mt-3">
</form>
</div>
</div>
@endforeach
自分で試したこと
index.blade.phpファイルの「input type="hidden" name="host_id" value="{{ $record->id }}"」のvalueの値が「Route::get('/index/{id}',[HomeController::class, 'reply'])->name('reply');」の{id}の部分と同じ数値を取得しているので、これを使って何かできないか試行錯誤しましたが、思うように使いこなすことができず、解決できませんでした。(泣)
以上、何か良い方法をご教示頂けましたら幸いです。
よろしくお願いいたします。