はじめに
Laravelでユーザーを「ひとつ前のページ」に戻したいとき、
便利に使えるのが url()->previous()
です。
戻るリンクや、処理完了後のリダイレクト、バリデーションエラー時の復帰など、
さまざまな場面で活躍します。
この記事では、url()->previous()
の基本的な使い方と注意点についてまとめます。
url()->previous()
とは?
Laravelのヘルパーメソッドで、
直前のリクエスト元のURL(前のページ)を取得します。
$url = url()->previous();
内部的には、HTTPヘッダーの Referer 情報を参照しています。
①よくある使い方
- 1.戻るリンクを作る(Blade)
<a href="{{ url()->previous() }}">戻る</a>
→ ユーザーを直前の画面に戻すナチュラルなリンクが作れます。
- 2.コントローラーからリダイレクト
public function store(Request $request)
{
// 保存処理...
return redirect(url()->previous())->with('message', '投稿が完了しました');
}
→ 処理後に元いたページへ戻すときに便利です。
- 3.バリデーションエラー後に戻るなら back()
return back()->withErrors($validator)->withInput();
→ これも内部的には url()->previous() を使っていますが、より安全&Laravel流です。
②注意点
Referer ヘッダーが無いと動かない
例えば:
- ブラウザでURLを直接開いた場合
- リファラー制限されているページからの遷移
このようなときは、url()->previous() は nullを返すこともあるので注意。
③url()->previous() と back() の違い
④まとめ
url()->previous() を知っていると、
「ユーザーがどこから来たのか」に基づいたより自然なUI設計ができます!