Laravel使用Laratrust包报错:Call to undefined method App\Models\User::attachRole()
解决Laravel使用Laratrust时Call to undefined method App\Models\User::attachRole()错误
你犯了一个典型的新手错误:把Laratrust提供的HasRolesAndPermissions trait加到了RegisterController里,而这个trait必须加到你的User模型中,只有这样User实例才会拥有attachRole这类角色操作方法。
具体修改步骤
- 修改User模型
打开app/Models/User.php,引入并使用HasRolesAndPermissionstrait:
<?php namespace App\Models; use Illuminate\Foundation\Auth\User as Authenticatable; use Laratrust\Traits\HasRolesAndPermissions; class User extends Authenticatable { use HasRolesAndPermissions; // 模型原有代码... }
- 清理RegisterController
删掉控制器里无关的trait引用:
// 删掉这行引入 // use Laratrust\Traits\HasRolesAndPermissions; class RegisterController extends Controller { use RegistersUsers; // 删掉这行use语句 // use HasRolesAndPermissions; // 控制器原有代码... }
- 修正create方法逻辑
确保方法返回用户实例,而不是attachRole的返回值(更符合Laravel默认逻辑):
protected function create(array $data) { $user = User::create([ 'name' => $data['name'], 'email' => $data['email'], 'password' => Hash::make($data['password']), ]); $user->attachRole('admin'); return $user; }
内容的提问来源于stack exchange,提问作者meory
相关产品推荐
相关产品推荐

