Ошибка при использовании библиотеки Spate Media: «Вызов BadMethodCallException для неопределенного метода Illuminate \ Foundation \ Auth \ User :: addMediaFromRequest ()» - PullRequest
0 голосов
/ 26 мая 2020

Это моя модель пользователя

    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');
        }


    }

Это мой UserController

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');

    }
}

Я хочу использовать Spat ie Медиа-библиотеку и загрузить фотографию для каждого пользователя, но я получаю эту ошибку, связанную с Spat ie Library:

«Вызов неопределенного метода Illuminate \ Foundation \ Auth \ User :: addMediaFromRequest ()».

Я прочитал несколько связанных сообщений, но не понимаю, как это исправить. Спасибо.

1 Ответ

1 голос
/ 26 мая 2020

Версия 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. Класс User, используемый для реализации HasMedia, находится в пространстве имен App\User. Но вы импортируете класс User из пространства имен Illuminate\Foundation\Auth\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/

...