laravel进阶学习之laravel生命周期

2023-11-16

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

laravel进阶学习之laravel生命周期 的相关文章

  • 如何从 Laravel 执行存储过程

    我需要在表单提交数据后执行存储过程 我让存储过程按照我想要的方式工作 并且我的表单正常工作 我只是不知道从 laravel 5 执行 sp 的语句 它应该是这样的 执行 my stored procedure 但我似乎在网上找不到类似的东西
  • 如何将条件聚合 mysql 转换为 laravel 查询?

    我的sql查询是这样的 SELECT a number a description MAX CASE WHEN b attribute code brand then b attribute value END as brand MAX C
  • 如何使用 Eloquent 对多列进行平均?

    我希望获得相关模型上多个列的平均值 如下所示 this gt reviews gt avg communication friendliness 其中沟通和友善度是一系列列名称 然而 聚合函数似乎只支持单个列名称 所以我这样做 attrib
  • 使用 Laravel 和 Eloquent 从表中选择全部

    我正在使用 Laravel 4 设置我的第一个模型 以从名为的表中提取所有行posts 在标准 MySQL 中我会使用 SELECT FROM posts 如何在 Laravel 4 模型中实现这一目标 我的完整模型源代码如下
  • Laravel 读写连接不同步

    我在 Laravel 5 2 应用程序中使用读写 MySQL 连接设置 mysql gt write gt host gt env DB HOST WRITE localhost read gt host gt env DB HOST RE
  • 优雅地退出 Laravel 作用域

    我有一个范围 它根据用户角色以限制方式起作用 您可以将一组规则转发到限制数据库最终输出的范围 一个非常简化的角色限制示例 first name foo 只会返回其记录first name开始于foo 这实际上意味着我已禁止具有该角色的用户查
  • 当路由不存在时重定向 laravel 4

    我正在使用 laravel 4 当我的项目处于生产模式时 我得到 抱歉 找不到您要查找的页面 当我到达一条不存在的路线时 当我 grep 我的代码时 它在两个地方找到 vendor symfony debug Symfony Compone
  • 获取存储中文件的路径

    我使用以下方法将文件保存到存储中 request gt file avatar gt store avatars 将其保存到 storage app avatars avatar png 我怎样才能获得这个文件 文件夹的路径 not网址 使
  • Laravel 无法连接 Oracle

    我在用着耶吉拉 laravel oci8 https github com yajra laravel oci8用于 Oracle 与 Laravel 的连接 但我无法从客户端 PC 连接到 Oracle 服务器 showing this
  • Laravel - 获取每个 UID 类型的最后一个条目

    我有一个表 其中包含 1000 多种不同产品的 100 个条目 每个条目都由唯一的 UID 标识 ID UID MANY COLUMNS CREATED AT 1 dqwdwnboofrzrqww1 2018 02 11 23 00 43
  • Laravel 5:如何检索并显示属于特定类别的所有帖子

    我有3张桌子 user id username subreddits id name created at posts id title link user id subreddit id 问题是 我手动获取 subreddit 类别的 i
  • Laravel - LIKE 运算符来搜索加密值

    我正在尝试在 Laravel 应用程序中实现一个搜索模块 可以按名称过滤用户 为了保护用户 name 列行在数据库上加密 我面临的问题是下面的查询总是返回 0 结果 我在搜索数据库之前对搜索输入值进行加密 patients DB selec
  • 如何禁用vuejs中的按钮

    我想在填写表单时禁用该按钮 当所有输入都填满后 将使用 vuejs 和 laravel 框架启用按钮 我尝试通过简单地禁用按钮来实现这一点
  • 如何根据状态从父表和子表获取数据,其中外键每行具有不同的状态

    我有 2 个具有外键关系的表 情况是我有一个case and a case有很多revisions 和每个revision有自己的status 如果仅更改外键表状态的特定行 我想获取父表数据和子数据 Table Case id case n
  • 谷歌 reCaptcha 与 Laravel

    我正在尝试在没有任何软件包的情况下使用 Laravel 8 安装 Google reCaptcha v2 我正在尝试遵循this https laravelarticle com laravel google recaptcha integ
  • https 重定向 laravel .htaccess 之后删除 /public

    我有一个 Laravel 页面部署在共享主机中 当我强制 http 请求重定向到 https 时 url 包含 public 我的根 htaccess 是 RewriteEngine on RewriteCond REQUEST URI p
  • 使用 Laravel Socialite 登录 facebook

    然而 我是 Laravel 的新手 我正在遵循以下教程http www codeanchor net blog complete laravel socialite tutorial http www codeanchor net blog
  • Laravel 7.x eloquent addSelect 子查询来计数

    与 一起工作Laravel 7 x and Postgresql 我有一个User类和GroupPivot数据透视表 可以对多个模型进行分组 我想创建一个专栏User如果用户拥有针对该组的当前数据透视条目 则为 true 或 false 类
  • Laravel 5.7:维护模式的自定义刀片模板,但不是 503.blade.php

    每次php artisan down开启后 Laravel 显示 503 页面 好的 我可以通过创建名为的新文件来自定义它503 blade php inside resources views errors 关键是 我在任何时候都不认为维
  • Laravel 4.2 Composer 安装错误:“无法扫描类”

    我想通过 Composer 在新的 Laravel 4 2 安装上安装一些软件包 但是 我遇到了例外 这是我的作曲家文件 name laravel laravel description The Laravel Framework keyw

随机推荐

  • STM32PWM知识详解

    目录 一 PWM简介 1 定义 2 主要参数 二 PWM产生方式 1 普通IO口与PWM口 2 普通IO口产生PWM 3 PWM口产生PWM 总结 参考链接归纳 一 PWM简介 1 定义 脉冲宽度调制 PWM 是一种数字信号 最常用于控制电
  • 【C++入门】虚继承的实现原理

    转载自 http blog csdn net xiejingfa article details 48028491 准备工作 1 VS2012使用命令行选项查看对象的内存布局 微软的Visual Studio提供给用户显示C 对象在内存中的
  • 计算两个数的平方和

    3 计算两个数的平方和 从键盘读入两个实数 编程计算并输出它们的平方和 要求使用数学函数pow x y 计算平方值 输出结果保留2位小数 程序中所有浮点数的数据类型均为float include
  • html右侧增加页面导航快捷键效果图及代码

    如果一个页面非常长时 在页面右侧增加导航快捷键还是比较有必要的 见效果图 局部放大后的效果 具体实现代码如下 html相关代码 div class gototop none div a href img src static imgs to
  • exit()函数

    进程的终止方式 有8种方式使进程终止 其中前5种为正常终止 它们是 1 从 main 返回 2 调用 exit 3 调用 exit 或 Exit 4 最后一个线程从其启动例程返回 5 最后一个线程调用pthread exit 异常终止有3种
  • Redis4.0从库复制报错"master_link_status:down"处理一例

    环境描述 Redis版本 4 0 2 主库 192 168 0 190 从库 192 168 0 191 今天Zabbix告警一直出现redis sync error的信息 于是登陆redis发现从库复制状态一直是master link s
  • 若依前端框架登录执行过程

    一 登录页面 登录页面是Views文件夹下的login vue文件 二 点击登录调用的方法为 handleLogin handleLogin this refs loginForm validate valid gt if valid th
  • Bugku题目MISC部分(持续更新)

    目录 telnet 1和0的故事 这是一张单纯的图片 隐写 社工 进阶收集 来自论坛提问 gQiRf的附件 zip 简单取证1 mimikatz PasswareKitForensic工具 眼见非实 啊哒 ping FileStoraged
  • spring中使用ThreadPoolTaskExecutor配置线程池

    背景 spring中经常使用ThreadPoolTaskExecutor来调用JDK的ThreadPoolExecutor初始化线程池 尤其在有异步执行的任务时 由于spring 异步任务默认使用的executor不会reuse线程 因此需
  • 寄存器优化补充

    一 简要概述 结构体在寄存器中应用可以简化繁琐的寄存器 这段代码在每个结构体成员前增加了一个 IO 前缀 它的原型在这段代码的第一行 代表了C 语言中的关键字 volatile 在 C 语言中该关键字用于表示变量是易变的 要求编译器不要优化
  • Pytorch cpu版安装及卸载详细教程(以及安装成功后无法在ide中使用问题解决方法)

    Pytorch cpu版安装及卸载详细教程 以及安装成功后无法在ide中使用问题解决方法 一 准备 1 首先确定python的版本 且python是64位 win R 输入cmd 确定 在页面中输入python回车 可查看python版本既
  • React---使用react脚手架搭建项目

    一 使用create react app创建react应用 1 1 react脚手架 xxx脚手架 用来帮助程序员快速创建一个基于xxx库的模板项目 包含了所有需要的配置 语法检查 jsx编译 devServer 下载好了所有相关的依赖 可
  • eclipse改变html字体大小,细说eclipse设置字体以及字体大小?

    电脑现已成为我们工作 生活和娱乐必不可少的工具了 在使用电脑的过程中 可能会遇到eclipse设置字体以及字体大小 的问题 如果我们遇到了eclipse设置字体以及字体大小 的情况 该怎么处理怎么才能解决eclipse设置字体以及字体大小
  • 初步使用基于RESTful的前后端交互方式,包括前后端增、删、改流程

    目录 一 问题背景 二 解决方法 1 POST增 2 DELETE删 3 PUT改 4 参考源代码 一 问题背景 最开始接触web后端开发时 使用的请求大多是通过自定义的一些请求名称 比如update do delete do等 现在为了规
  • python实现卷积神经网络实现手写数字识别

    工具 tensorflow opencv import cv2 import numpy as np import tensorflow as tf np set printoptions suppress True def get tra
  • 重新定义分析 - EventBridge 实时事件分析平台发布

    对于日志分析大家可能并不陌生 在分布式计算 大数据处理和 Spark 等开源分析框架的支持下 每天可以对潜在的数百万日志进行分析 事件分析则和日志分析是两个完全不同的领域 事件分析对实时性的要求更高 需要磨平事件领域中从半结构化到结构化的消
  • ListView的视图属性View的Details的时候每一项的旁边老有个小方框,如何去掉?

    ListView有一个CheckBox属性 将其修改为false即可
  • 共享存储映射

    存储映射I O 存储映射I O memory mapped I O 使一个磁盘文件与存储空间中的一个缓冲区相映射 于是当从缓冲区中获取数据 就相当于读文件中的相应字节 与此类似 将数据存入缓冲区 则相应的字节就自动写入文件 这样 就可在不适
  • 算法序列--树

    树结构是一种非线性存储结构 存储的是具有 一对多 关系的数据元素的集合 树的结点 结点 使用树结构存储的每一个数据元素都被称为 结点 例如图中 数据元素 A 就是一个结点 父结点 双亲结点 子结点和兄弟结点 对于图中的结点 A B C D
  • laravel进阶学习之laravel生命周期

    Laravel 生命周期概括起来大致可分为三步 1 加载依赖 2 创建 Laravel 应用实例 3 接收请求并响应 加载依赖及生成实例部分 一个请求进来之后由public index php开始也由public index php结束 直