Laravel 8创作者申请审批触发500错误:Undefined variable $user
解决Laravel 8 CreatorController store方法的Undefined variable $user错误
错误原因
报错Undefined variable $user属于代码逻辑漏洞:
- 处理已注册用户(
$subscriber != null分支)时,代码仅定义了$subscriber变量,未初始化$user; - 后续判断
$form_id != null时,无论新老用户都会执行表单更新操作,此时老用户分支下$user未定义,触发变量不存在错误。
本次错误和之前的Mailgun付费问题无关,是纯代码逻辑问题。
解决方案
提供两种简洁的修复方式:
方式一:统一变量名(推荐)
在已注册用户的处理分支中,将$subscriber赋值给$user,确保两种分支下$user变量都存在:
if($subscriber!=null){ // Already registered user $subscriber->update([ 'role_id' => 3, 'name' => $request->name, ]); $subscriber = User::findorfail($subscriber->id); // 新增该行,同步变量 $user = $subscriber; $subscriber->profile_token = env('FRONTEND_PATH').'creator-profile-form?token='.base64_encode($subscriber->email.'/'.$subscriber->id); Mail::send(['html'=>'email.creators.register'], ['creator' => $subscriber], function($message) use($subscriber){ $message->to($subscriber->email, $subscriber->name)->subject ('Welcome to the Creator Community'); $message->from('creatorcommunity@omnicourse.io','Omnicourse Creator Community'); }); }
方式二:表单更新时动态判断
在更新表单的代码中,通过三元运算符判断使用对应用户ID:
if($form_id!=null){ //Formdan geldi $form = CreatorApplicationForm::findorfail($form_id); $form->update([ 'creator_id' => $subscriber ? $subscriber->id : $user->id ]); }
内容的提问来源于stack exchange,提问作者iguner
相关产品推荐
相关产品推荐

