Laravelを使っていると、数十ページにも及ぶ一覧画面を作成することがあります。その際、更新画面に遷移し、更新が完了したら直前までページネーションしていた一覧画面に戻りたいという要望が出てくることがあります。この記事では、その要望に応えるための具体的な方法について紹介します。
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の記述
次に、更新画面を表示する際に直前のページURLを取得する方法を紹介します。この例では、社員テーブル(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の記述
次に、更新画面を表示するビューの設定方法を紹介します。以下は、更新画面のためのBladeテンプレート(employeesedit.blade.php)の具体例です。
一覧画面に戻るボタンにURL「{{$prevurl}}」を設定すると直前のページへリンク出来ます。
更新画面でページの更新やその他の原因で直前のページ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="{{$prevurl}}">
< 一覧画面に戻る
</a>
</div>
</form>
まとめ
このように、Laravelを使って一覧画面から更新画面へのスムーズな遷移を実現することができます。特に、多くのページがある場合でも、直前のページに戻る機能を簡単に実装できるため、ユーザーの利便性を大幅に向上させることができます。
この方法を活用して、より使いやすいウェブアプリケーションを作成してください。今後のプロジェクトで役立つことを願っています。
※流用される場合は自己責任でお願いします。