laravel框架整体架构
日期: 2019-01-12 分类: 个人收藏 323次阅读
使用过arave框架的朋友,大家都知道laravel框架里面除了提供一些基本的功能(如控制器、视图、模型)之外,还有中间件、门面、契约等,这些东西为啥在laravel框架存在呢?今天就给大家说说。
首先应该了解laravel框架的架构模式(设计核心,laravel 框架是使用服务组件化的开发模式开发的,就像钢铁侠一样,钢铁侠每个部位就是一个组件,laravel框架就是由不同的服务组件构成的。
laravel 里面多个服务组件构成了laravel框架。
分层设计:把相同功能的类库放在同一个文件夹里面。
laravel框架有多个类组成服务,由多个服务组成组件。类==》服务===》组件
laravel使用组件化的开发模式,多个类==》服务===》组件,多个类组成服务,多个服务构成组件。
多个组件提供不同的服务,然后多个服务构成我们的项目。
服 务
顾名思义就是为提供你所需要的东西。比如服务器可以提供上菜服务,游戏里面提供打怪的z装备等等。在laravel里面所提供的服务有 认证服务、数据库服务、缓存服务、队列服务等等。对于laravel来说,组件就是服务;对于用户来说,laravel提供给我们的各个功能模块就是服务。
服务提供者
可以给你提供一组服务的东西就是服务提供者。laravel里面服务提供者主要有以下几个作用:
- 注册一些实例对象到容器中
- 初始化组件,让laravel能够加载这个组件
服务容器
服务容器就是ioc容器。
把所有的服务放在一个盒子里,存放服务的容器。laravel里面的服务容器位于 vendor/laravel/framework\src\illuminate\Container\Container.php.
Container.php 就是laravel框架的服务容器,也就是IOC容器。服务提供者注册的实例都在这个服务容器里面。用来管理项目运行的服务。
门面
门面是为服务容器提供了一个[ 静态 ]调用的接口。就是使用静态的方式调用服务器容器类,比如:
契 约
用来规划laravel服务的格式、方法、参数等,给服务提供者规范了一定约束。所以在框架里面所有的契约都是接口,这样才能规范服务提供者。
中间件
用户来请求laravel框架时,为保证安全做一定的筛选、过滤,就像你去故宫时候,一道一道的门。
事件
事件就类似tp5 里面 切面编程思想的钩子和行为,具体如下解释。
laravel框架总体框架图:
如上图所示: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的都是组件。
IOC和DI:
1、概念:
-
ioc-控制反转:将设计好的对象交给容器控制,而不是传统的在 对象内部直接控制
-
di-依赖注入:在程序运行过程中,动态向某个对象提供它所需要的其它对象,这一点是通过di来实现的。
-
ioc 本质就是在操作数组:
2、ioc 本质是一个数组:
除特别声明,本站所有文章均为原创,如需转载请以超级链接形式注明出处:SmartCat's Blog
标签:laravel
精华推荐