【PHP】Laravel框架的这些你都懂的话,它核心架构基本就懂了

使用过Larave框架的朋友都知道laravel框架里面除了提供一些基本的功能(如控制器、视图、模型)以外,还有中间件、门面、契约等,这些东西是如何在laravel框架运用起来的呢?今天就和你们详聊一下。php

首先应该了解laravel框架的架构模式(设计核心,laravel 框架是使用服务组件化的开发模式开发的,laravel框架就是由不一样的服务组件构成的)laravel

laravel 里面多个服务提供者构成了laravel组件。分层设计:把相同功能的类库放在同一个文件夹里面。sql

laravel框架有多个类组成服务,由多个服务组成组件。类 -> 服务 -> 组件shell

laravel使用组件化的开发模式,多个类 -> 服务 -> 组件,多个类组成服务,多个服务构成组件。数据库

多个组件提供不一样的服务,而后多个服务构成咱们的项目。缓存

请求生命周期服务器

大概的流程如图:闭包

在这里插入图片描述

理论上,生命周期主要有这么些阶段,但其中,开发者大多数只需关注路由、中间件、控制器、闭包函数、逻辑处理等几步架构

固然,每一步的内部,仍是会有更多细化的执行流程,在这里,通常不深刻研究框架或改造框架,不多会细化研究,但研究底层,依旧是学习的好选择。并发

服务

说的就是提供给你所须要的东西,在laravel里面所提供的服务有 认证服务、数据库服务、缓存服务、队列服务等等。laravel框架全部服务都定义在了app/config/app.php 里面

服务提供者

能够给你提供一组服务的东西就是服务提供者,laravel里面如上所示其实定义的服务器提供者,好比IlluminateAuthAuthServiceProvider::class,提供认证服务的服务提供者。IlluminateCacheCacheServiceProvider::class,提供缓存服务的服务提供者

好处:开发者能够节省下更多的精力去处理项目逻辑,且不一样开发个体之间能达到必定默契,最重要的是,项目达到分层解耦,业务逻辑只依赖于服务,并不依赖于服务底层的实现。

解耦以后,咱们能够任意升级或自定义服务的底层实现,只要确保底层类实现了该服务

总结:其实服务是一个抽象的概念,服务器提供者是完成这个抽象概念的具体实施者

服务容器

把全部的服务放在一个盒子里,存放服务的容器。laravel里面的服务容器位于 vendor/laravel/frameworksrcilluminateContainerContainer.php.

Container.php 就是laravel框架的服务容器。

契约

用来规划服务提供者的格式、方法、参数等,给服务提供者规范了必定约束。因此在框架里面全部的契约都是接口,这样才能规范服务提供者。

门面

门面再一次展现了Laravel在设计上的优秀,它让Laravel变得更加灵活易扩展,那么它的概念是:

  1. 为开发者提供服务容器中服务的静态代理

  2. 它对服务访问方式作了补充,以前使用服务必须获取服务的实例,再调用服务的方法,但使用facade,就能够直接把服务当静态对象来调用了。

  3. config/app.php中服务别名alias大多数都使用了facade

  4. 使用facade是有风险的,并非用的越多越好,这在手册上有少许的介绍,但具体的,仍是须要开发中去发现

laravel框架整体架构图

在这里插入图片描述

如上图所示:laravel框架是由多个服务组件构成的 -> 服务提供者(最下面的不一样的服务组件)。

Foundation 的 Application 用来建立服务提供者,建立好以后保存在Container 的 Container 的服务容器里面,交由他管理,Application 要继承 Container。

为了约定服务提供者提供的服务,咱们定义一个规范,这就是契约。

对于咱们的用户(最上面的用户)想使用laravel框架,必须经过控制器来使用(上面的Controller),使用laravel框架主要是使用laravel里面的服务提供者(上面的 new 服务),这样就是最传统的开发模式,和服务器容器没有直接关系,若是laravel这样设计的话,基本上和其余框架同样,没有任何优点。因此通常不怎么作。

因为有契约,契约是服提供者的接口,因此咱们也能够直接使用契约,new 服务旁边的黄色线。使用契约用注入的方式,这样使用的很差之处是若是一个方法里面使用多个契约的话,咱们就得注入多个契约,这样代码看起来不优雅。

因而laravel里面就出现了门面,门面的出现方便咱们优雅的调用服务器提供者的类。因为每一个服务提供者的类太长了如:
IlluminateCookieCookieServiceProvider::class,
IlluminateDatabaseDatabaseServiceProvider::class,
因此又引出了别名,使用别名以后 简化了咱们调用的服务提供者的类。

事件:laravel里面的模型里面的事件,好比用户对数据库操做时作的一个监听。对整个项目运行进行监听,有监听的动做。相似tp5里面的钩子和行为。

中间件:作用户的请求作必定的过滤。

点关注,不迷路

好了各位,以上就是这篇文章的所有内容了,能看到这里的人呀,都是人才。以前说过,PHP方面的技术点不少,也是由于太多了,实在是写不过来,写过来了你们也不会看的太多,因此我这里把它整理成了PDF和文档,若是有须要的能够

点击进入暗号: PHP+「平台」

在这里插入图片描述

在这里插入图片描述


更多学习内容能够访问【对标大厂】精品PHP架构师教程目录大全,只要你能看完保证薪资上升一个台阶(持续更新)

以上内容但愿帮助到你们,不少PHPer在进阶的时候总会遇到一些问题和瓶颈,业务代码写多了没有方向感,不知道该从那里入手去提高,对此我整理了一些资料,包括但不限于:分布式架构、高可扩展、高性能、高并发、服务器性能调优、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx等多个知识点高级进阶干货须要的能够免费分享给你们,须要的能够加入个人 PHP技术交流群

相关文章
相关标签/搜索