zoukankan      html  css  js  c++  java
  • Laravel框架深入探索-入口文件

    这一系列文章旨在对Laravel框架进行深入的解析,了解和揭示框架本身的内在实现机制,以便更好地指导我们对框架的使用。

     

    入口文件

    基于Laravel框架开发的应用,对Web Server来说,和普通应用并无区别。所以当Web Server收到一个Http请求,不管是Apache还是Nginx,都只是简单地将其交给DocumentRoot下面特定的入口文件index.php,并等待其返回相应的结果。对Laravel而言,这个入口就是工程目录中的public/index.php文件。所有Http请求过来后,都是由这个文件进行处理的。在某种意义上,甚至可以说,都是在这个文件之内进行处理的。
     
    index.php当中的代码,虽然很概括,但完整地描述了Laravel框架对一个Http请求进行处理的流程。框架中所有其他的处理过程,都被隐藏在这个概括的流程当中,等待我们去一一探索和发现。这个大概的流程,是这样的:
     
    1. 定义了一个常量:LARAVEL_START,记录脚本被启动时服务器的时间,精确到毫秒。
    2. 执行vendor/autoload.php当中的代码。这个实际上是composer的提供的一项功能,用来自动加载被composer下载的库中的所有类文件,等我们对composer进行研究之后再来具体探讨。
    3. 通过执行bootstrap/app.php当中的代码,来创建一个Laravel应用(app)实例,这个实例可以认为是一个容器,里面装载了所有为了完成一次对request进行处理并返回response所需要的各种组件。因为Web Server每收到一个http请求,都会调用一次public/index.php,所以,对每一个http请求,都是由一个全新创建的app实例来处理的。反过来,每个app实例,也都只处理一个请求。
    4. 创建一个kernel对象。
    5. 让kernel去处理http请求(也就是request对象),并将处理结果封装成一个response对象。
    6. 发送response对象。
    7. 结束对这次“request->response“的处理。
     
    就是这七个步骤。
  • 相关阅读:
    蓝牙遥控小车设计(二)——车体搭建和利用串口遥控小车
    WIN7下使用sublime text3替代arduino IDE(安装方法和所遇到的问题)
    在使用Arduino中遇到的问题(无法使用中文注释、程序无法下载)
    python 任务调度模块sched
    使用__all__限制模块可被导入对象
    python判断任务是CPU密集型还是IO密集型
    使用__slots__限制实例的属性
    使用装饰器获取被调用函数的执行的时间
    python上下文管理器
    http协议以及http1.0和http1.1的区别
  • 原文地址:https://www.cnblogs.com/zhaoxizhe/p/11288660.html
Copyright © 2011-2022 走看看