laravel进阶学习之laravel生命周期

Laravel 生命周期概括起来大致可分为三步

1.加载依赖

2.创建 Laravel 应用实例

3.接收请求并响应

加载依赖及生成实例部分

        一个请求进来之后由public/index.php开始也由public/index.php结束,直接打开该入口文件

        laravel8的版本生成项目之后相比5.5版本会多出几行代码  maintenance.php,这里的功能是检查网站是否开启了维护模式,是laravel8新特性
可通过命令直接开启或关闭
        php artison down 开启维护 
        php artisan up  关闭维护  
        页面输出模板可以在resource下的error/503.blade.php自由控制页面输出。

         往下大致分为了两个部分  ,加载项目依赖和创建应用实例部分,依赖即引进来的包,着重看app.php创建实例部分

        此处主要是生成对应的容器并绑定路径,服务提供者,别名等到容器内,需要注意的是注册了并不代表启动,如下

        往下可以看到内核绑定的部分

         以http内核为例定义了过滤请求的http中间件,以及配置,异常Facades 和服务提供者和引导程序等

        小结:创建实例阶段做了创建 APP 容器、注册应用路径、注册基础服务提供者、配置中间件和引导程序等工作

 处理请求部分

         还是在入口文件处,自带的解析方法是通过make方法来实例化http内核

        实例化内核所做的操作即上面所提到的  注册各种中间件到容器内来过滤请求,后续即到处理请求本身的环节,handle ()处理请求,capture()创建请求的实例 

 handle的实例化在http内核内已有对应的操作内容,包括

sendRequestThroughRouter()

 

                打开函数可以看到对该请求的具体操作,注册 $request到容器内,清除之前的 $request实例,启动引导程序并将请求发送到路由

        看一下引导程序做了什么操作,

功能如上服务提供者的注释

    最后请求是交给Pipeline()的方法处理,即管道,定义是将对象传入多个类中执行任何类型的任务,并在所有任务执行完成后一次性返回最终结果

        我们看下Pipeline的中间件底层实现,因跳跃比较多,只取最核心的部分,需要先了解array_reduce()   

解释里面就能看出来是依次递归调用闭包pipes,堆栈的操作为先进后出,故会调用array_reverse来进行翻转,确保排在前面的中间件能先被执行

之前的handle内有还有两个方法shouldSkipMiddleware() ,只是判定

        dispatchToRouter()  

        之前内核部分已经绑定的route服务在此处会调用dispatch来执行http请求

 这部分如果路由的实现是一个控制器,会完成控制器实例化并执行指定方法,如果是函数则会直接调用该函数,此处的功能也就是我们的逻辑处理核心部分,执行结束后会调用已绑定的prepareResponse生成响应并返回

 

 

         最后回到入口文件处结束会调用send方法来进行返回,即值客户端响应,打开laravel\vendor\symfony\http-foundation\Response.php  的send方法

      方法里面有个判定,fastcgi_finish_request方法是否存在来决定方法,但是fastcgi_finish_request

  也就是说当php处于 fast_cgi模式运行时,响应发送给客户端后,该进程并不会马上结束,还会继续执行,所以后续会调用terminate中间件来结束生命周期

总结: 

        1.在生成实例时会注册项目基础服务、服务提供者别名、目录路径等注册工作,还会绑定 HTTP 内核及 Console 内核到容器内, 同时在 HTTP 内核里配置中间件和引导程序。

        2.接收请求时会依据运行环境从 容器 解析出 HTTP 内核或 Console 内核, 如果是HTTP 内核还会将把中间件及引导程序注册到容器

        3.请求处理时会将http实例注册到容器内,以引导程序来配置环境变量,中间件,配置文件,异常处理等服务,依据路由来执行中间件过滤请求并且执行对应的控制器方法,最后返回响应结果,结束。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值