Laravel中实现提现限制及现有控制器代码正确性验证
你的实现存在几个关键问题,我来帮你梳理下:
首先,咱们先拆解核心问题:
- 逻辑错误:你通过
Auth::user()->id获取当前用户ID,说明用户已经处于登录状态了,这时候重定向到登录页完全不合理——用户明明已经登录,却被踢去登录,肯定会困惑。正确的做法应该是引导用户去完成首次资金添加(比如跳转到充值页面),而不是登录页。 - 语法/逻辑漏洞:你的
else分支没有用花括号{}包裹,这会导致只有$data['general'] = GeneralSetting::first();属于else的执行内容,后面的$data赋值和return view不管$fund是否为null都会执行。这不仅逻辑混乱,甚至可能在$fund为null时,先执行了redirect但后续代码还继续运行,造成不必要的资源消耗。 - 需求匹配的小疑问:你提到用户注册时会获得100免费额度存在
USERS表,但当前代码完全没考虑这个额度——如果免费额度是可以用来提现的,那你的判断条件就不符合需求了;如果需求确实是“必须在Fund表有记录才能提现”,这条可以忽略,但前面两个问题必须修复。
修正后的代码示例:
public function newWithdraw() { $fund = Fund::where('user_id', Auth::user()->id)->first(); if ($fund == null) { Session::flash('type','danger'); Session::flash('message','please add funds atleast once'); // 这里替换成资金添加/充值页面的路由,比如假设路由名为'fund.add' return redirect()->route('fund.add'); } else { $data['general'] = GeneralSetting::first(); $data['site_title'] = $data['general']->title; $data['basic'] = BasicSetting::first(); $data['page_title'] = "User Withdraw Method"; $data['method'] = ManualPayment::whereStatus(1)->get(); return view('withdraw.withdraw-new',$data); } }
额外的优化建议:
- 增加登录校验:如果用户未登录,
Auth::user()会返回null,调用->id会报错,所以最好先判断用户登录状态:
public function newWithdraw() { if (!Auth::check()) { return redirect()->route('login'); } $userId = Auth::user()->id; // 用exists()判断记录存在性,性能更优(无需获取整条记录) $hasFundRecord = Fund::where('user_id', $userId)->exists(); if (!$hasFundRecord) { Session::flash('type','danger'); Session::flash('message','please add funds atleast once'); return redirect()->route('fund.add'); } // 前面已经有return,这里可以不用else,代码更清晰 $data['general'] = GeneralSetting::first(); $data['site_title'] = $data['general']->title; $data['basic'] = BasicSetting::first(); $data['page_title'] = "User Withdraw Method"; $data['method'] = ManualPayment::whereStatus(1)->get(); return view('withdraw.withdraw-new',$data); }
- 如果免费额度需要纳入提现判断,你可以调整条件,比如:
$user = Auth::user(); $hasFundRecord = Fund::where('user_id', $user->id)->exists(); // 若免费额度>0也允许提现,就修改判断条件 if (!$hasFundRecord && $user->free_quota <= 0) { // 提示并跳转 }
内容的提问来源于stack exchange,提问作者Waqar Ali
相关产品推荐
相关产品推荐

