【问题标题】:Instance not created Spatie Role and Permission未创建实例 Spatie 角色和权限
【发布时间】:2023-09-29 00:28:01
【问题描述】:

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

异常:“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()”

有什么问题?

【问题讨论】:

    标签: laravel laravel-8 laravel-permission


    【解决方案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

    【讨论】: