Laravel PR

Laravelで直前のページURLを取得し前のページに戻るボタンを作成【url()->previous()】

記事内に商品プロモーションを含む場合があります

Laravelで作った数十ページある一覧画面でページネーション後、更新画面に遷移し、その後更新画面から直前までページネーションしてた一覧画面に戻りたかったので、その際に作成した直前のページURLを取得し前のページに戻るボタンを作成した方法をご紹介します。

Routeの記述

※一覧画面と更新画面表示、更新処理の記述です。

//一覧画面
Route::get('/employees', 'EmployeesController@index');

//更新画面
Route::get('/employeesedit/{employees}','EmployeesController@edit');
Route::post('/employeesedit/{employees}','EmployeesController@edit');

//更新処理
Route::post('/employees/update','EmployeesController@update');

直前のページURLを取得し更新画面を表示するControllerの記述

※更新画面では社員テーブル(employees)からidが一致する更新データを取得します。
そして「url()->previous()」で直前のページURLを取得してます。
もし直線のページURLが一覧画面以外の場合(ページの更新等)は一覧画面のURLを直接指定します。

    //更新画面
    public function edit($id)
    {
        $employees = Employee::find($id);

        $prevurl = url()->previous();	//直前のページURLを取得

        //直前のページURLが一覧画面(パラメータ有)ではない場合
        if(false === strpos($prevurl, 'employees?')){
            $prevurl = url('/employees');	//一覧画面のURLを直接指定
        }

        return view('employeesedit', [
            'employee' => $employees,
            'prevurl' => $prevurl,	//更新画面の一覧画面に戻るボタン用URL
        ]);
    }

直前のページURLを設定する更新画面のviewの記述

※更新画面を表示するemployeesedit.blade.phpファイルを用意します。
一覧画面に戻るボタンにURL「{{$listurl}}」を設定すると直前のページへリンク出来ます。
更新画面でページの更新やその他の原因で直前のページURLが一覧画面以外の場合(ページの更新等)は一覧画面URLに遷移します。

<div>
    @include('common.errors')
</div>

<form action="{{ url('employees/update') }}" method="POST">
    @csrf

   <div>
	更新画面:ID「<b>{{$employee->id}}</b>」
	<input type="hidden" name="id" value="{{$employee->id}}">
   </div>

   <div>
   <label for="employee_name">社員名</label>
   <input type="text" name="employee_name" value="{{ old('employee_name', $employee->employee_name) }}">
   </div>

   <div>
   <label for="employee_department">部署名</label>
   <input type="text" name="employee_department" value="{{ old('employee_department', $employee->employee_department) }}">
   </div>

    <button type="submit">更新</button>

    <div>
    <a class="btn btn-link" href="{{$listurl}}">
       < 一覧画面に戻る
    </a>
    </div>
</form>

 
 
※流用される場合は自己責任でお願いします。