Laravel中RegisterController::guard不存在且MemberExtra表未写入数据如何修复
问题原因
- 报错触发点为代码中的
$this->guard()->login($user)行:你的RegisterController中未定义guard()方法,虽引入了RegistersUserstrait,但部分Laravel版本中该trait默认不提供guard()方法,或方法未被正确加载。 users表已写入但MemberExtra表无数据的原因:用户创建逻辑在报错代码前执行,已完成数据库写入,报错后程序终止运行,后续的附属表写入、会员更新逻辑均未执行。
修复方案
1. 解决guard不存在报错(二选一即可)
方案一:直接替换登录逻辑(最简便)
无需依赖控制器的guard()方法,将$this->guard()->login($user);替换为以下代码即可:
// 默认使用web guard,若使用自定义guard可修改为auth()->guard('你的guard名称')->login($user) auth()->login($user);
方案二:在控制器中新增guard方法
在RegisterController类中添加如下方法即可:
protected function guard() { // guard名称需和config/auth.php中的配置对应,默认值为web return auth()->guard('web'); }
2. 可选优化:添加事务避免脏数据
为防止后续再出现部分逻辑成功、部分失败导致的脏数据问题,可将注册相关的所有写操作包裹在数据库事务中,修改后的register方法参考:
public function register(Request $request) { $this->validator($request->all())->validate(); \DB::transaction(function () use ($request) { event(new Registered($user = $this->create($request->all()))); auth()->login($user); MemberExtra::create([ 'user_id' => $user->id, 'left_paid' => 0, 'right_paid' => 0, 'left_free' => 0, 'right_free' => 0, 'left_bv' => 0, 'right_bv' => 0, ]); updateMemberBelow($user->id, 'FREE'); }); return $this->registered($request, $user) ?: redirect()->route('home'); }
内容的提问来源于stack exchange,提问作者user16945874
相关产品推荐
相关产品推荐

