位置: 编程技术 - 正文

Laravel学习教程之IOC容器的介绍与用例(laravel视频教程)

编辑:rootadmin

推荐整理分享Laravel学习教程之IOC容器的介绍与用例(laravel视频教程),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:laravel技巧,laravel实战教程,laravel技巧,laravel视频教程,laravel入门与实战,laravel入门与实战,laravel入门与实战,laravel 入门教程,内容如对您有帮助,希望把文章链接给更多的朋友!

前言

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

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

基本用例

绑定一个类型到容器

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

从容器中取得一个类型

当执行 App::make 方法,闭包函数被执行并返回结果。

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

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

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

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

哪里去注册绑定呢

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

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

自动解析

取得一个类

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

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

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

Laravel学习教程之IOC容器的介绍与用例(laravel视频教程)

绑定一个接口实现

然而,在某些情况下,一个类可能依赖某个接口实现,而不是一个 “具体的类”。当在这种情况下,App::bind方法必须通知容器注入哪个接口实现:

现在考虑下这个控制器:

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

实际用例

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

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

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

IoC 使用的其他例子

过滤器, composers, 和 事件句柄也能够从IoC容器中获取到。当注册它们的时候,只需要把它们使用的类名简单给出即可:

服务提供器

服务器提供器是将一组相关 IoC 注册到单一路径的有效方法。将它们看做是一种引导组件的方法。在服务器提供器里,你可以注册自定义的验证驱动器,使用 IoC 容器注册应用程序仓库类,甚至是自定义 Artisan 命令。

事实上,大多数核心 Laravel 组件包含服务提供器。应用程序所有注册在服务提供器的均列在 app/config/app.php 配置文件的 providers 数组中。

定义服务提供器

要创建服务提供器,只需继承 IlluminateSupportServiceProvider 类并且定义一个 register 方法:

注意:在 register 方法,应用程序通过 $this->app 属性访问 IoC 容器。一旦你已经创建了提供器并且想将它注册到应用程序中, 只需简单的放入 app 配置文件里 providers 数组中。

运行时注册服务提供器

你也可以使用 App::register 方法在运行时注册服务提供器:

容器事件

注册获取事件监听者

容器在每次获取对象时都触发一个事件。你可以通过使用 resolving 方法来监听该事件:

注意:获取到的对象将会传入回调函数中。

译者:mpandar(马胜盼)

总结

标签: laravel视频教程

本文链接地址:https://www.jiuchutong.com/biancheng/289993.html 转载请保留说明!

上一篇:Laravel 5.4向IoC容器中添加自定义类的方法示例

下一篇:PHP使用GD库制作验证码的方法(点击验证码或看不清会刷新验证码)(php gd库)

  • 预缴所得税退回
  • 退多缴纳的所得税 现金流如何处理
  • 什么是纳税义务人,在理解这一观念时应注意哪些问题
  • 一般纳税人简易计税可以抵扣进项税额吗
  • 公司往来借款在现金流量表哪里填写
  • 收益性支出应计入产品成本对吗
  • 以固定资产换入原材料
  • 单位班车费用是福利费吗
  • 企业购进货物发生的下列相关税费中,应计入货物
  • 工会账务期末结转
  • 不开票不走公账的后果
  • 企业年金的个人账户怎么查
  • 增值税发票可以抵税吗
  • 公司客车高速费如何抵扣进项税?
  • 贸易公司购买汽车的发票可以用抵公司的税吗
  • 天猫企业支付宝怎么提现
  • 发票签收单怎么填
  • 纳税人签章填什么
  • 福利费开专票怎么处理
  • 减税真的能有效推动经济增长吗?
  • 一般纳税人所说的税率是
  • 有限合伙企业需要承担无限连带责任吗
  • 劳务派遣实缴资本
  • 收到股东交的多余的股金怎么做账务处理
  • 餐饮业中的赠菜计入什么科目
  • 咨询费属于什么大类
  • 公司购买进口产成品关税会计分录怎么做?
  • 收回已核销的坏账并入账是什么意思
  • 房屋出租收入是多少
  • 华为鸿蒙系统网速慢怎么解决
  • 浏览器备份文件在哪里
  • PHP中使用全局变量来接受表单中提交的数据
  • 财务会计制度
  • win10网页打不开但是有网
  • 企业核定征收管理办法
  • 金融资产的会计处理方法
  • 员工报销电话费缴纳个税
  • 个人所得税如何计算
  • 增值税专用发票丢了怎么补救
  • phpswoole面试
  • 记账凭证和收付账簿区别
  • 落日时光
  • java如何实现异步处理
  • 延期交房补偿协议
  • 固定资产提前报废
  • echarts series name
  • 报销人和收款人不一致
  • 公章盖的字不完整有效吗
  • 累计折旧大白话
  • 长期股权投资的明细科目有哪些
  • 售价金额核算法的优点有
  • 房地产企业印花税计入什么科目
  • 房地产企业拆迁还房会计处理
  • 武汉营业执照注销流程
  • 收到以前年度增值税退税账务处理怎么做账
  • 捐赠 赞助 区别
  • 应付账款从质保金扣除
  • 企业收到退回的银行汇票多余款项时,应作的会计处理有
  • 注册资金一般是多少
  • 固定资产的印花税费计入什么科目里
  • 公司两年未给员工申报个税违法吗
  • 项目预验收包括以下哪些内容
  • 会计的凭证怎么做账
  • Mysql中explain作用详解
  • 虚拟机怎么安装VMware Tools
  • hprof-conv.exe
  • win8.1桌面图标消失
  • js实现登录界面
  • js获取checkbox选中的元素
  • python编程字符串中删除数字
  • js刷新当前窗口
  • bootstrap-treeview自定义双击事件实现方法
  • js从数组中选出最大的三个数
  • flask框架数据可视化
  • 网上办税如何打印电子凭证
  • 税控盘反写后才能开票吗
  • 已申报的纳税申报表怎么下载打印
  • 外经证开错了怎么办
  • 公司有房屋租赁许可证吗
  • 余杭区税务局地址
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设