laravel-5.4 - 错误:从空值创建默认对象

时间:2017-04-19 07:05:48

标签: php database image authentication laravel-5.4

我想将图像路径存储在数据库中。 vendor\laravel\framework\src\Illuminate\Foundation\Auth\RegistersUsers.php下的我的控制器代码如下:

public function register(Request $request)
{
    $this->validator($request->all())->validate();

    if($request->hasFile('image')) {
    $image_name = $request->file('image')->getClientOriginalName();              
    $image_path = $request->file('image')->store('public'); 
    $user->image = Storage::url($image_name);
    $user->save();
    }

    event(new Registered($user = $this->create($request->all())));

   // $this->guard()->login($user); disable autologin for new users

    return $this->registered($request, $user)
                    ?: redirect($this->redirectPath());
}

我收到以下错误:RegistersUsers.php第40行中的ErrorException:从空值enter image description here创建默认对象。

图像将保存在公用文件夹中,但无法在用户表数据库中保存图像路径。用户表的模式
      Schema::create('users', function (Blueprint $table) { $table->increments('user_id'); $table->string('name'); $table->string('image'); $table->rememberToken(); $table->timestamps();

如何继续将图像路径存储在数据库的用户表中

2 个答案:

答案 0 :(得分:5)

你还没有初始化变量$user所以在控制器中使用它之前你要添加$user = new User;,假设你已经有use App\User;

$user = new \App\User;如果你不这样做。

<强>更新 如果您正在尝试更新现有用户记录,则必须通过选择基于其主键的$user变量进行初始化,该主键应在请求中发送,然后执行初始化,如:

$user_id = $request->input('user_id');
$user = User::find($user_id);

答案 1 :(得分:0)

使用以下简单方法:

$user = User::where('id', '=', $id)->first(); // where id is method param from url or request object
$user->save();

当更新多个表(其中子表中的ID具有外键且需要在更新过程中明确定义)时,这也更容易。

$user = User::find($id);是该对象表的主键的情况下,$id也可以正常工作