国际奥委会容器如何在Laravel中使用

  介绍

这篇文章给大家介绍奥委会容器如何在Laravel中使用,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

Laravel使用国际奥委会(控制反转,控制倒转,这是一个设计模式,可以先查看下百科)容器这个强有力的工具管理类依赖。依赖注入(也是一种设计模式,一般用于实现IOC)是一个不用编写固定代码来处理类之间依赖的方法,相反的,这些依赖是在运行时注入的,这样允许处理依赖时具有更大的灵活性。

理解Laravel奥委会容器是构建强大应用程序所必要的,也有助于Laravel核心本身。下面话不多说了,来一起看看详细的介绍吧。

绑定一个类型到容器

奥委会容器有两种方法来解决依赖关系:通过闭包回调或者自动解析。首先,我们来探究一下闭包回调。首先,需要绑定一个“类”型到容器中:

应用程序::bind (& # 39; foo # 39;函数(App)美元   {   返回新FooBar;   });

<强>从容器中取得一个类型

 $ value=https://www.yisu.com/zixun/App:使(“foo”); 

当执行<代码>应用程序::使方法,闭包函数被执行并返回结果。

<>强绑定一个“共享”类型到容器

有时,你只想将绑定到容器的类型处理一次,然后接下来从容器中取得的都应该是相同实例:

应用程序::单例(& # 39;foo # 39;函数()   {   返回新FooBar;   });

<>强绑定一个已经存在的类型实例到容器

你也可以使用实例方法,将一个已经存在的对象接口绑定到容器中:

 $ foo=foo;
  
  应用程序:实例(& # 39;foo # 39; $ foo), 

奥委会绑定,很像事件句柄或者路由过滤,通常在“引导代码(引导代码),之后完成。换句话说,它们在你的应用程序准备处理请求,也即是在一个路由或者控制器被实际执行之前执行。和其他引导代码一样,开始文件通常作为国际奥委会绑定注册一种方法。另外,你可以创建一个App/国际奥委会。php(文件名不一定一样)文件,并在开始文件中包含它。

如果你的应用程序有很大量奥委会绑定,或者你想根据不同的分类将国际奥委会绑定分割到不同的文件,你可以尝试在服务提供器(见下面)中进行绑定

<>强取得一个类

奥委会容器足够强大,在许多场景下不需要任何配置就能取得类。例如

类FooBar {
  
  公共函数__construct(巴兹巴兹美元)
  {
  $ this→巴兹=$巴兹;
  }
  
  }
  
  fooBar=应用:美元:使(& # 39;fooBar # 39;); 

我们虽然没有在容器中注册fooBar类,容器仍然可以取得该类,甚至自动注入巴兹依赖!

当某个类型没有绑定到容器,奥委会容器将使用PHP的反射工具来检查类和读取构造器的类型提示。使用这些信息,容器可以自动构建类实例。

<>强绑定一个接口实现

然而,在某些情况下,一个类可能依赖某个接口实现,而不是一个“具体的类”。当在这种情况下,<代码>应用程序::> 应用程序::绑定(& # 39;UserRepositoryInterface& # 39; & # 39; DbUserRepository& # 39;);

现在考虑下这个控制器:

类用户扩展BaseController {
  
  公共函数__construct (UserRepositoryInterface $用户)
  {=$ $ this→用户用户;
  }
  
  }

由于我们将UserRepositoryInterface绑定了具体类,DbUserRepository在该控制器创建时将会被自动注入到该控制器。

Laravel提供了几个方法使用国际奥委会容器增强应用程序可扩展性和可测试性。一个主要的例子是取得控制器。所有控制器都通过国际奥委会容器取得,意味着可以在控制器构造方法中对依赖的类型提示,它们将自动被注入。

<强>对控制器的依赖关系做类型提示

类OrderController延伸BaseController {
  
  公共函数__construct (OrderRepository订单美元)
  {=$ $ this→订单订单;
  }
  
  公共函数getIndex ()
  {
  $=$这→订单→所有();
  
  返回视图::使(& # 39;订单# 39;,紧凑(& # 39;所有# 39;));
  }
  
  }

在这个例子中,OrderRepository将会自动注入到控制器。意味着当单元测试模拟请求时,OrderRepository将会绑定到容器以及注入到控制器中,允许无痛与数据库层交互。

国际奥委会容器如何在Laravel中使用