Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

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}の部分と同じ数値を取得しているので、これを使って何かできないか試行錯誤しましたが、思うように使いこなすことができず、解決できませんでした。(泣)

以上、何か良い方法をご教示頂けましたら幸いです。
よろしくお願いいたします。

0

1Answer

解決しました!

return redirect()->back() ;

にて、目的の動作をすることができました。

お騒がせいたしました。

0Like

Your answer might help someone💌