使用 url()->previous() 或 request()->header('referer') 获取上一页 URL,结合 withInput() 和 old() 保留表单输入,需确保 StartSession 中间件启用。

在 Laravel 中,获取上一次请求的 URL 和输入数据是常见需求,比如表单提交失败后返回原页面并保留输入内容。Laravel 提供了简单且优雅的方式来实现。
获取上一次请求的 URL
使用 url()->previous() 或 request()->header('referer') 可以获取用户来自哪个页面。
-
url()->previous():Laravel 封装的方法,安全且推荐使用。 -
request()->header('referer'):直接读取 HTTP 请求头中的 referer 字段,注意拼写是 "referer" 而非 "referrer"。
示例:
return redirect(url()->previous());
常用于重定向回上一页。
获取上一次请求的输入数据
Laravel 的 old input 机制可以在重定向后保留表单输入。
- 使用
old('field_name')获取指定字段的旧值。 - 在 Blade 模板中常用:
- 使用
request()->old()可在控制器中访问旧输入。
当使用 withInput() 时,Laravel 会将当前请求的输入数据存入 session,供下次请求读取。
示例:
return back()->withInput();
这会让用户回到前一页,并保留已填写的表单内容。
结合使用场景(如表单验证失败)
典型流程如下:
public function store(Request $request)
{
$validated = $request->validate([
'email' => 'required|email',
'name' => 'required|string|max:255'
]);
// 验证失败会自动重定向回上一页,并保留输入
// 手动处理时可:
if ($someError) {
return back()->withInput();
}
// 正常处理逻辑...
}
Blade 模板中通过 old() 函数恢复输入值。
基本上就这些。Laravel 的 withInput() 和 old() 配合 session,让前后请求之间的数据传递变得非常自然。不复杂但容易忽略的是:确保中间件 StartSession 和 ShareErrorsFromSession 已启用,这是 old input 能工作的前提。










