Laravel带用户图片的注册功能报错:Request无picture方法
问题排查:Laravel图片上传报错
Method Illuminate\Http\Request::picture does not exist 问题描述
提交用户注册表单插入数据库时,图片处理环节报错,报错信息为:Method Illuminate\Http\Request::picture does not exist。相关控制器及模型代码如下:
控制器代码
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use Illuminate\Support\Str; use App\User; use File; class UsersController extends Controller { public function registeract(Request $request) { $this->validate($request,[ 'name' => 'required|alpha', 'email' => 'required|email', 'level' => 'required|alpha', 'picture' => 'required|file|image|mimes:jpeg,jpg,png|max:1048', 'password' => 'required' ]); // 将上传的图片数据准备到变量中 $picture = $request->picture('picture'); $file_name = time()."_".$picture->getClientOriginalName(); // 填写文件上传目标文件夹名称 $upload_directory = 'p_users'; $picture->move($upload_directory, $file_name); User::create([ 'name' => $request->name, 'email' => $request->email, 'level' => $request->level, 'picture' => $file_name, 'password' => bcrypt($request->password), 'remember_token' => Str::random(60) ]); return redirect('/ec-admin/users')->with('usrsinsertno', 'Data Inserted Successfully!'); } }
User模型代码
<?php namespace App; use Illuminate\Contracts\Auth\MustVerifyEmail; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; class User extends Authenticatable { use Notifiable; protected $fillable = [ 'name', 'email', 'level', 'picture', 'password' ]; protected $hidden = [ 'password', 'remember_token', ]; protected $casts = [ 'email_verified_at' => 'datetime', ]; }
错误原因
报错核心是错误调用了Request类不存在的picture()方法。在Laravel中,获取上传文件的正确方式不是$request->picture('picture'),而是使用$request->file('field_name')方法,或者直接通过属性访问$request->field_name。
修复方案
修改控制器中获取图片的代码,同时建议添加目录存在性检查(避免上传目录不存在导致的报错):
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use Illuminate\Support\Str; use App\User; use File; class UsersController extends Controller { public function registeract(Request $request) { $this->validate($request,[ 'name' => 'required|alpha', 'email' => 'required|email', 'level' => 'required|alpha', 'picture' => 'required|file|image|mimes:jpeg,jpg,png|max:1048', 'password' => 'required' ]); // 正确获取上传的图片文件 $picture = $request->file('picture'); // 或者用属性访问:$picture = $request->picture; $file_name = time()."_".$picture->getClientOriginalName(); $upload_directory = 'p_users'; // 检查目录是否存在,不存在则创建(递归创建多级目录) if (!File::exists($upload_directory)) { File::makeDirectory($upload_directory, 0755, true, true); } $picture->move($upload_directory, $file_name); User::create([ 'name' => $request->name, 'email' => $request->email, 'level' => $request->level, 'picture' => $file_name, 'password' => bcrypt($request->password), 'remember_token' => Str::random(60) ]); return redirect('/ec-admin/users')->with('usrsinsertno', 'Data Inserted Successfully!'); } }
模型验证
你的User模型配置是正确的:$fillable数组已经包含picture字段,确保了批量赋值的安全性,无需修改。
内容的提问来源于stack exchange,提问作者My Buzynis
相关产品推荐
相关产品推荐

