Laravel 5.3注册后获取最后插入ID并传递至指定页面的问题
解决Laravel注册后传递用户ID到跳转页面的问题
我来帮你搞定这个需求!你已经移除了自动登录逻辑,现在只需要调整注册方法里的跳转代码,就能把刚创建的用户ID传递到userprofileadd.blade.php页面了。
问题分析
你之前尝试用->with('id', $user->id),但因为链式调用的位置不对,导致session里没有正确存入这个ID。我们需要调整register方法的返回语句,把with正确绑定到redirect实例上。
步骤1:修改RegisterController的register方法
把你现有的register方法改成下面这样:
public function register(Request $request) { $this->validator($request->all())->validate(); event(new Registered($user = $this->create($request->all()))); // 注释掉自动登录逻辑 // $this->guard()->login($user); // 调整跳转逻辑,把用户ID通过session传递 return redirect($this->redirectPath())->with('id', $user->id); }
这里直接返回redirect()->with(...),而不是原来的三元表达式,这样就能确保用户ID被存入session闪存中。
步骤2:在userprofileadd.blade.php中获取用户ID
现在你可以在目标页面里通过session来获取这个ID了,比如:
{{-- 直接输出ID --}} <p>当前用户ID:{{ session('id') }}</p> {{-- 或者在表单中使用,比如隐藏域 --}} <form method="POST" action="/submit-profile"> @csrf <input type="hidden" name="user_id" value="{{ session('id') }}"> {{-- 其他表单字段 --}} </form>
备选方案:使用路由参数传递ID
如果你觉得用session不够直观,也可以通过路由参数来传递ID:
- 首先修改
$redirectTo属性:
protected $redirectTo = '/userprofileadd'; // 改成带参数的路由 protected $redirectTo = '/userprofileadd/{id}';
- 然后在register方法中跳转时传入ID:
return redirect(route('userprofileadd', ['id' => $user->id]));
- 记得在routes/web.php中定义对应的路由:
Route::get('/userprofileadd/{id}', function($id) { return view('userprofileadd', ['userId' => $id]); })->name('userprofileadd');
- 在页面中直接使用
$userId变量:
<p>当前用户ID:{{ $userId }}</p>
这样两种方式都能实现你的需求,选哪种看你的习惯啦!
内容的提问来源于stack exchange,提问作者shank
相关产品推荐
相关产品推荐

