【问题标题】:Error when using Spate Media Library: "BadMethodCallException Call to undefined method Illuminate\Foundation\Auth\User::addMediaFromRequest()"使用 Spate 媒体库时出错:“BadMethodCallException 调用未定义的方法 Illuminate\Foundation\Auth\User::addMediaFromRequest()”
【发布时间】:2020-05-26 13:37:12
【问题描述】:

这是我的用户模型

    namespace App;
    use Illuminate\Database\Eloquent\Model;
    use Spatie\MediaLibrary\HasMedia\HasMedia;
    use Spatie\MediaLibrary\HasMedia\HasMediaTrait;
    use Spatie\MediaLibrary\File;
    use Illuminate\Notifications\Notifiable;
    use Illuminate\Contracts\Auth\MustVerifyEmail;
    use Illuminate\Foundation\Auth\User as Authenticatable;

    class User extends Authenticatable  implements HasMedia

    {

        use HasMediaTrait;
        use Notifiable;

        protected $fillable = [
            'name', 'email', 'password',
        ];

        protected $hidden = [
            'password', 'remember_token',
        ];

        protected $casts = [
            'email_verified_at' => 'datetime',
        ];

        public function role(){
            return $this->belongsToMany('App/Role');
        }


    }

这是我的用户控制器

namespace App\Http\Controllers;

use Illuminate\Foundation\Auth\User;
use Illuminate\Http\Request;

class UserController extends Controller
{
public function store(Request $request)
    {
        $user=new User;
        $user->name=($request['name']);
        $user->email=($request['email']);
        $password=bcrypt($request['password']);
        $user->password=$password;

        $user_photo=$request['photo'];

        $user->addMediaFromRequest('photo')->toMediaCollection('images');


        $user->save();
        return redirect('/admin');

    }
}

我想使用 Spatie 媒体库并为每个用户上传一张照片,但我收到与 Spatie 库相关的错误:

"调用未定义的方法 Illuminate\Foundation\Auth\User::addMediaFromRequest()"。

我已经阅读了一些相关的帖子,但我不明白如何解决这个问题。 谢谢。

【问题讨论】:

  • 你使用的是什么版本的库?
  • 版本 7,因为我有 Laravel 5.8。

标签: laravel laravel-medialibrary


【解决方案1】:

该库的第 8 版具有此文档。你使用的是正确的特质吗?

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Spatie\MediaLibrary\HasMedia;
use Spatie\MediaLibrary\InteractsWithMedia;

class YourModel extends Model implements HasMedia
{
    use InteractsWithMedia;
}

已编辑:

另一方面,使用HasMediaTrait 适用于版本7,所以我假设您使用的是版本7。我认为这是因为您导入了错误的User 类。用于实现HasMediaUser 类位于App\User 命名空间中。但是您正在从 Illuminate\Foundation\Auth\User 命名空间导入 User 类。所以把它改成use App\User;就可以了。

namespace App\Http\Controllers;

use App\User;
use Illuminate\Http\Request;

class UserController extends Controller
{
public function store(Request $request)
    {
        $user=new User;
        $user->name=($request['name']);
        $user->email=($request['email']);
        $password=bcrypt($request['password']);
        $user->password=$password;

        $user_photo=$request['photo'];

        $user->addMediaFromRequest('photo')->toMediaCollection('images');


        $user->save();
        return redirect('/admin');

    }
}

https://docs.spatie.be/laravel-medialibrary/v8/basic-usage/preparing-your-model/

【讨论】:

  • 我在我的 UserController 中更改了“App/User”而不是“Illuminate\Foundation\Auth\User”,它可以工作。
猜你喜欢
  • 2020-01-24
  • 1970-01-01
  • 1970-01-01
  • 2019-12-12
  • 2017-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-19
相关资源
最近更新 更多