Laravel实现用户头像上传时update方法提示未定义如何解决
问题原因与解决方案
你遇到的undefined method错误主要由以下几个常见配置缺失导致,按顺序排查修改即可:
- 导入Auth门面或使用正确的全局辅助函数
你当前代码中调用的Auth()首字母大写,却没有在控制器顶部引入Auth门面,Laravel会在当前命名空间下查找Auth类导致调用失败,两种修复方案二选一即可:- 方案1:在控制器顶部添加Auth门面导入
use Illuminate\Support\Facades\Auth; - 方案2:直接使用Laravel自带的小写全局认证辅助函数,无需额外导入
将Auth()->user()改为auth()->user()
- 方案1:在控制器顶部添加Auth门面导入
- 确认User模型配置正确
- 首先检查
config/auth.php中用户提供者配置,确保providers.users.model指向正确的Eloquent用户模型,默认是App\Models\User::class,保证auth()->user()返回的是Eloquent模型实例,才会拥有update方法 - 打开
App/Models/User.php,将image字段添加到$fillable批量赋值白名单中,避免后续出现批量赋值错误:protected $fillable = [ 'name', 'email', 'password', 'image', // 新增头像字段 ];
- 首先检查
- 修改后的完整控制器代码参考
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; // 选方案1需要加此行,选方案2可省略 class HomeController extends Controller { /** * Create a new controller instance. * * @return void */ public function __construct() { $this->middleware('auth'); } /** * Show the application dashboard. * * @return \Illuminate\Http\Response */ public function index() { return view('home'); } public function upload(Request $request) { if($request->hasFile('image')){ $filename = $request->image->getClientOriginalName(); $request->image->storeAs('images',$filename,'public'); // 两种写法二选一 // 写法1:用门面 Auth::user()->update(['image'=>$filename]); // 写法2:用辅助函数,无需导入门面 // auth()->user()->update(['image'=>$filename]); } return redirect()->back(); } }
内容的提问来源于stack exchange,提问作者Jonypaul
相关产品推荐
相关产品推荐

