Laravel 5.2 с Entrust — имя класса должно быть допустимым объектом или строкой

У меня проблема при регистрации пользователя, после сохранения пользователя в моей таблице пользователей, я пытаюсь назначить роль для этого пользователя, но я получаю сообщение об ошибке:

Имя класса должно быть допустимым объектом или строкой.

мой код

(App \ Http \ Контроллеры \ Auth \ AuthController.php)

<?php

namespace App\Http\Controllers\Auth;

use App\User;
use App\Role;

use Validator;
use App\Http\Controllers\Controller;
use App\Http\Controllers\Controller\Auth;
use Illuminate\Foundation\Auth\ThrottlesLogins;
use Illuminate\Foundation\Auth\AuthenticatesAndRegistersUsers;
use Illuminate\Http\Request;class AuthController extends Controller
{

public function postRegister(Request $request){

$this->validate($request,[
'name' => 'required|min:4|max:255|unique:users',
'email'=>'required|email|max:255|unique:users',
'password'=>'required|confirmed|min:3'
]);

$user_data = array(
//$field => $request->input('login'),
'name'=> $request->input('name'),
'email' => $request->input('email'),
'password' => $request->input('password')
);

$user=User::create([
'name'=>$user_data['name'],
'email'=>$user_data['email'],
'password'=>bcrypt($user_data['password']),
'active'=>1
]);

echo $user;
$role = Role::where('name','=','admin')->first();

//$user->attachRole($role->id);
$user->roles()->attach($role->id);

//return redirect('auth/register')->with('message','store');

}
}

echo на $user распечатать это:

{ «Имя»: «bbbbbvq», «электронная почта»: «[email protected]», «активный»: 1, «updated_at»: «2016-03-03
19:07:24 «,» creation_at «:» 2016-03-03 19:07:24 «,» id «: 32}

Я скопировал доверить Zizaco\Entrust\src\config\config.php к моему proyect\app\config\entrust.php и я изменил файл test\vendor\zizaco\entrust\src\Entrust\EntrustServiceProvider.php в этом методе:

  private function registerCommands()
{
/*
$this->app->bindShared('command.entrust.migration', function ($app) {
return new MigrationCommand();
});
$this->app->bindShared('command.entrust.classes', function ($app) {
return new ClassCreatorCommand();
});*/

$this->app->singleton('command.entrust.migration', function ($app) {
return new MigrationCommand();
});
$this->app->singleton('command.entrust.classes', function ($app) {
return new ClassCreatorCommand();
});
}

0

Решение

Entrust еще не был обновлён до версии 5.2, поэтому вам нужно немного повозиться с ним.

Как тапос гоша сказал раньше вам нужно войти в vendor/zizaco/entrust/src/commands/MigrationCommand.php и по строке 86:

Удалить

$usersTable  = Config::get('auth.table');
$userModel   = Config::get('auth.model');

И заменить его на

$usersTable  = Config::get('auth.providers.users.table');
$userModel   = Config::get('auth.providers.users.model');

А потом в config/auth.php В файле напишите строку провайдера так:

'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\User::class,
'table' => 'users',
],

// 'users' => [
//     'driver' => 'database',
//     'table' => 'users',
// ],
],
3

Другие решения

Это решило проблему для меня.

vendor/zizaco/entrust/src/Entrust/Traits/EntrustRoleTrait.php на линии 51 звонит Config::get('auth.model') в качестве первого параметра $this->belongsToMany( вызов метода.

public function users()
{
return $this->belongsToMany(Config::get('auth.model'), ...
// return $this->belongsToMany(Config::get('auth.model'), ...
}

Вы можете изменить это на Config::get('auth.providers.users.model') или обновите свой config/auth.php файл для включения записи model => App\Users::class

'model' => App\Users::class,

'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\Users::class,
],
],

Я предпочитаю обновить config/auth.php файл, так как любые изменения в папке поставщика не будут доступны для других в вашей команде, или когда вы перейдете к производству.

Конечно, если вы используете другую модель для своих пользователей, вы должны указать ее.

6

По вопросам рекламы [email protected]