未创建实例 Spatie 角色和权限

Posted

技术标签:

【中文标题】未创建实例 Spatie 角色和权限【英文标题】:Instance not created Spatie Role and Permission 【发布时间】:2021-03-19 12:00:15 【问题描述】:

我创建了一个提供程序并链接了存储库,但我得到了错误:

异常:“Illuminate\Contracts\Container\BindingResolutionException” 文件:“../vendor/laravel/framework/src/Illuminate/Container/Container.php” 线路:1038 消息:“目标 [Illuminate\Database\Eloquent\Model] 在构建 [App\Http\Controllers\Api\V1\User\RoleController, App\Repositories\Model\RoleRepository] ​​时不可实例化。” 追踪:[,…]

命名空间:Spatie\Permission\Models\Role;Spatie\Permission\Models\Permission;

RepositoryServiceProvider:

class RepositoryServiceProvider extends ServiceProvider
  
    // ...
    $this->app->bind(ModelRepositoryInterface::class, function() 
      return new PermissionRepository(new Permission);
    );
    
    // ...
  

在调试过程中,安装了dd(new Role)。并得到了这个错误:

“在 null 上调用成员函数 connection()”

有什么问题?

【问题讨论】:

【参考方案1】:

由于我使用相同的接口,但不同的类(控制器)需要这样绑定:

$this->app->when(RoleController::class)
  ->needs(ModelRepositoryInterface::class)
  ->give(function () 
    return new RoleRepository(new Role);
  );

$this->app->when(PermissionController::class)
  ->needs(ModelRepositoryInterface::class)
  ->give(function () 
    return new PermissionRepository(new Permission);
  );

见documentation。

【讨论】:

以上是关于未创建实例 Spatie 角色和权限的主要内容,如果未能解决你的问题,请参考以下文章

如何在登录具有 Spatie 的 Laravel 权限的用户之前检查用户角色?

我如何在 laravel 中为 spatie 包(ACL 管理)中的其他角色分配用户列表权限?

Laravel 角色和权限包

Laravel Print 根据用户的权限选择选项

使用带有 spatie 包的 Laravel 8 尝试获取具有角色问题的用户列表调用未定义的方法 App\Models\User::hasAllRoles()

Laravel 5.7 + Spatie 权限 + JWT 身份验证