Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Laravel 为什么存储库接口绑定到服务容器_Laravel_Repository - Fatal编程技术网

Laravel 为什么存储库接口绑定到服务容器

Laravel 为什么存储库接口绑定到服务容器,laravel,repository,Laravel,Repository,我们需要在laravel应用程序中使用存储库。我们需要创建两个重要的东西,一个是存储库接口,另一个是存储库类 我的疑问是,为什么存储库接口和存储库类向服务提供商注册 我从服务提供商处删除了存储库接口和类 显示以下错误 “目标[App\Repository\UserInterface]在生成时不可实例化” 接口类只是方法的定义(没有方法体),因此不可实例化。这意味着您不能执行新建App\Repository\UserInterface() 在代码中的某个地方有一个方法(或者可能是构造函数?),它接

我们需要在laravel应用程序中使用存储库。我们需要创建两个重要的东西,一个是存储库接口,另一个是存储库类

我的疑问是,为什么存储库接口和存储库类向服务提供商注册

我从服务提供商处删除了存储库接口和类

显示以下错误

目标[App\Repository\UserInterface]在生成时不可实例化”


接口
类只是方法的定义(没有方法体),因此不可实例化。这意味着您不能执行
新建App\Repository\UserInterface()

在代码中的某个地方有一个方法(或者可能是构造函数?),它接受
UserInterface
依赖项,比如

public function myMethod(UserInterface $repository) {
    ...
}
// or
public function __construct(UserInterface $repository) {
    ...
}
如果删除绑定,Laravel将尝试实例化一个
用户界面
,这将导致出现错误。 使用接口时,您必须始终使用具体的类
bind()
它们


我有一个问题,为什么要从ServiceProvider中删除绑定?

你好,莱昂纳多,谢谢你的回答。你问了一个问题“为什么要从ServiceProvider中删除绑定?”因为我们为什么要向ServiceProvider注册UserInterface(比如$this->app->bind('app\Repository\UserInterface',app\Repository\user\UserRepository');)我们直接将接口注入控制器,例如,假设我们需要用户模型方法,我们不在服务提供者中注册用户模型,而是直接将用户模型注入控制器并访问它们。那么为什么存储库要注册到服务提供者中呢?您不能直接注入接口。Laravel的服务容器必须知道如何解析该接口,这就是为什么您需要服务提供者中的绑定。
public function myMethod(UserInterface $repository) {
    ...
}
// or
public function __construct(UserInterface $repository) {
    ...
}