laravel框架整体架构

使用过arave框架的朋友,大家都知道laravel框架里面除了提供一些基本的功能(如控制器、视图、模型)之外,还有中间件、门面、契约等,这些东西为啥在laravel框架存在呢?今天就给大家说说。
首先应该了解laravel框架的架构模式(设计核心,laravel 框架是使用服务组件化的开发模式开发的,就像钢铁侠一样,钢铁侠每个部位就是一个组件,laravel框架就是由不同的服务组件构成的。

laravel 里面多个服务提供者构成了laravel组件。
分层设计:把相同功能的类库放在同一个文件夹里面。
laravel框架有多个类组成服务,由多个服务组成组件。类==》服务===》组件
laravel使用组件化的开发模式,多个类==》服务===》组件,多个类组成服务,多个服务构成组件。
多个组件提供不同的服务,然后多个服务构成我们的项目。

服 务

顾名思义就是为提供你所需要的东西。比如服务器可以提供上菜服务,游戏里面提供打怪的z装备等等。在laravel里面所提供的服务有 认证服务、数据库服务、缓存服务、队列服务等等。laravel框架所有服务都定义在了app/config/app.php 里面,如下图所示:

服务提供者

可以给你提供一组服务的东西就是服务提供者。比如服务员就是给你提供上菜服务的服务提供者。在laravel里面如上所示其实定义的服务器提供者,比如
Illuminate\Auth\AuthServiceProvider::class,=提供认证服务的服务提供者。
Illuminate\Cache\CacheServiceProvider::class,
= 提供缓存服务的服务提供者
总结:其实服务是一个抽象的概念,服务器提供者是完成这个抽象概念的具体实施者,
比如服务员是具体的,上菜服务是抽象的。

服务容器

把所有的服务放在一个盒子里,存放服务的容器。laravel里面的服务容器位于 vendor/laravel/framework\src\illuminate\Container\Container.php.
Container.php 就是laravel框架的服务容器。

契 约

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

中间件

用户来请求laravel框架时,为保证安全做一定的筛选、过滤,就像你去故宫时候,一道一道的门。

门面

门面是为了我们优雅的获取服务提供者的类,更详细的解释如下。

事件

事件就类似tp5 里面 切面编程思想的钩子和行为,具体如下解释。

laravel框架总体框架图:
laravel框架整体架构_第1张图片
如上图所示:laravel框架是有多个服务组件构成的===》服务提供者(最下面的不同的服务组件)。
Foundation 的 Application 用来创建服务提供者,创建好之后保存在Container 的 Container 的服务容器里面,交由他管理,Application 要继承 Container。
为了约定服务提供者提供的服务,我们定义一个规范,这就是契约。
对于我们的用户(最上面的用户)想使用laravel框架,必须通过控制器来使用(上面的Controller),使用laravel框架主要是使用laravel里面的服务提供者(上面的 new 服务),这样就是最传统的开发模式,和服务器容器没有半毛钱的关系,如果laravel这样设计的话,没有任何优势。一般不怎么做。
由于有契约,契约是服提供者的接口,所以我们也可以直接使用契约,new 服务旁边的金色线。使用契约用注入的方式,这样使用的不好之处是如果一个方法里面使用多个契约的话,我们就得注入多个契约,这样代码看起来不优雅。
于是laravel里面就出现了门面,门面的出现方便我们优雅的调用服务器提供者的类。由于每个服务提供者的类太长了如:
Illuminate\Cookie\CookieServiceProvider::class,
Illuminate\Database\DatabaseServiceProvider::class,
所以又引出了别名,使用别名之后 简化了我们调用的服务提供者的类。

事件:laravel里面的模型里面的事件,比如用户对数据库操作时做的一个监听。对整个项目运行进行监听,有监听的动作。类似tp5里面的钩子和行为。
中间件:做用户的请求做一定的过滤。
laravle框架里面 大多数都是组件,有composer的都是组件。

你可能感兴趣的:(laravel框架整体架构)