Laravel непредвиденная ошибка "пользователь класса содержит 3 абстрактных метода …"

При программировании моего приложения аутентификации на Laravel я столкнулся с ошибкой, которую я никогда раньше не видел. Я занимаюсь мозговым штурмом почти на час для решения этой проблемы, но пока не могу найти решение.

Ошибка:

Класс User содержит 3 абстрактных метода и поэтому должен быть объявлен абстрактным или реализовать оставшиеся методы (Illuminate \ Auth \ UserInterface :: getRememberToken, Illuminate \ Auth \ UserInterface :: setRememberToken, Illuminate \ Auth \ UserInterface :: getRememberTokenName)

Модель User.php:

<?php use Illuminate\Auth\UserInterface; use Illuminate\Auth\Reminders\RemindableInterface; class User extends Eloquent implements UserInterface, RemindableInterface { protected $fillable = [ "email", "username", "password", "password_temp", "code", "active", "created_at", "updated_at", "banned" ]; /** * The database table used by the model. * * @var string */ protected $table = 'users'; /** * The attributes excluded from the model's JSON form. * * @var array */ protected $hidden = array('password'); /** * Get the unique identifier for the user. * * @return mixed */ public function getAuthIdentifier() { return $this->getKey(); } /** * Get the password for the user. * * @return string */ public function getAuthPassword() { return $this->password; } /** * Get the e-mail address where password reminders are sent. * * @return string */ public function getReminderEmail() { return $this->email; } } 

И RegisterController.php

 <?php class RegisterController extends BaseController { public function getRegister() { return View::make('template.home.register'); } public function postRegister() { $rules = [ "email" => "required|email|max:50|unique:users", "username" => "required|max:50|min:5|unique:users", "password" => "required|max:50|min:6", "password_again"=> "required|same:password", ]; $messages = ["required" => "This field is required." ]; $validator = Validator::make(Input::all(), $rules, $messages); if($validator->fails()) { return Redirect::route('register')->withErrors($validator)->withInput(); } else { $email = Input::get('email'); $username = Input::get('username'); $password = Input::get('password'); $code = str_random(60); $user = User::create([ 'email' => $email, 'username' => $username, 'password' => Hash::make($password), 'code' => $code, 'activated' => 0, 'banned' => 0 ]); if ($user) { Mail::send('template.email.activate', ['link' => URL::route('activate', $code), 'username' => $username], function($message) use ($user) { $message->to($user->email, $user->username)->subject('Account Registration'); }); return Redirect::route('register')->with('homeError', 'There was a problem creating your account.'); } } return Redirect::route('register')->with('homeError', 'Account could not be created.'); } } 

Solutions Collecting From Web of "Laravel непредвиденная ошибка "пользователь класса содержит 3 абстрактных метода …""

Ах нашел его.

Это, по-видимому, документальное обновление Laravel.

Вы можете проверить документы Laravel, чтобы исправить свои проблемы:

«Во-первых, добавьте новый, nullable remember_token из VARCHAR (100), ТЕКСТ или эквивалент вашей таблицы пользователей.

Затем, если вы используете драйвер проверки подлинности Eloquent, обновите свой класс User следующими тремя способами:

 public function getRememberToken() { return $this->remember_token; } public function setRememberToken($value) { $this->remember_token = $value; } public function getRememberTokenName() { return 'remember_token'; } 

"

Дополнительную информацию см. На странице http://laravel.com/docs/upgrade .

Я не являюсь профессионалом в реализации интерфейсов PHP , но считаю, что вам нужно включить в свой класс User все методы UserInterface и RemindableInterface (поскольку он их реализует). В противном случае класс является «абстрактным» и должен определяться как таковой.

Насколько мне известно, PHP-интерфейс – это набор рекомендаций, которым должен следовать класс. Например, вы можете иметь общий интерфейс для конкретной таблицы базы данных. Это будет включать определение методов типа getRow() , insertRow() , deleteRow() , updateColumn() и т. Д. Затем вы можете использовать этот интерфейс для создания нескольких разных классов для разных типов баз данных (MySQL, PostgreSQL, Redis), но они должны все следовать правилам интерфейса. Это облегчает миграцию, поскольку вы знаете, какой драйвер базы данных вы используете для извлечения данных из таблицы, он всегда будет реализовывать те же методы, которые определены в вашем интерфейсе (другими словами, абстрагирование логики, специфичной для базы данных, из класса).

3 возможных исправления, насколько я знаю:

 abstract class User extends Eloquent implements UserInterface, RemindableInterface { } class User extends Eloquent { } class User extends Eloquent implements UserInterface, RemindableInterface { // include all methods from UserInterFace and RemindableInterface } 

Я считаю, что №2 лучше для вас, так как если ваш класс не реализует все методы из UserInterface и RemindableInterface почему вам нужно сказать, что это так.

Это проблема с обновлением. Laravel заставляет нас обновить модель User.php следующим кодом, чтобы исправить эту проблему.

Примечание. Все существующие сеансы «помнить меня» будут аннулированы этим изменением, поэтому все пользователи будут вынуждены повторно аутентифицироваться с вашим приложением.

 public function getRememberToken() { return $this->remember_token; } public function setRememberToken($value) { $this->remember_token = $value; } public function getRememberTokenName() { return 'remember_token'; } 

Я исправил ошибку, добавив UserTrait в User.php . Загрузите исходный файл User.php . Если вам не нужен материал rememberMe , вам просто нужно:

 <?php use Illuminate\Auth\UserTrait; use Illuminate\Auth\UserInterface; class User extends Eloquent implements UserInterface { use UserTrait; } 

«Во-первых, добавьте новый, nullable remember_token из VARCHAR (100), TEXT или эквивалент вашей таблицы пользователей, который помечен как этот $table->text('remember_token', 100)->nullable(); в таблицу затем выполните миграцию php-artisan и обновите модель Elq.

Пользователь класса содержит 6 абстрактных методов и поэтому должен быть объявлен абстрактным или реализовать оставшиеся методы

(Осветите \ Auth \ :: getAuthIdentifier пользовательского интерфейса,

Осветить \ Auth \ :: getAuthPassword пользовательского интерфейса,

Illuminate \ Auth \ UserInterface :: getRememberToken, …)

Пользователь класса содержит 6 абстрактных методов и поэтому должен быть объявлен абстрактным или реализовать оставшиеся методы

 (Illuminate\Auth\UserInterface::getAuthIdentifier, Illuminate\Auth\UserInterface::getAuthPassword, Illuminate\Auth\UserInterface::getRememberToken, ... ) 

Решение. Вы добавляете этот код в класс User (он работает для меня)

 use Authenticatable, CanResetPassword; 

Источник: GitHub

Я также получаю эту ошибку. Затем я добавил:

 getRememberToken() setRememberToken($value) getRememberTokenName() 

здесь, после того, как код работает