这是我参与8月更文挑战的第10天,活动详情查看:8月更文挑战
之前写了一篇Laravel提高DB查询效率的文章,转发到群里后竟然有人质疑我说“Laravel是他好几年前用的框架,没想到现在还有人在用。”
纳尼,什么意思嘛?别忘了PHP是最好的语言!
个人认为Laravel是非常优雅的开发框架:优雅的设计模式、强大的功能实现、各种方便的扩展、持续的版本更新,更主要的是迄今为止我认为最优秀的技术开发社区。
我必须为Laravel打Call。
2020年9月8号,Laravel发布了8.0版本。 Laravel计划于2022年1月25日发布9.0版本。
下面我介绍一下目前Laravel最新版(8.0版本)的新特性:
Laravel 8 通过引入 Laravel Jetstream,模型工厂类,迁移压缩,队列批处理,改善速率限制,队列改进,动态 Blade 组件,Tailwind 分页视图, 时间测试助手,artisan serve 的改进,事件监听器的改进,以及各种其他错误修复和可用性改进,对 Laravel 7.x 继续进行了改善。
生命周期概述
-
Laravel 应用的所有请求入口都是 public/index.php 文件。
-
而所有的请求都是经由我们的 Web 服务器(Apache/Nginx)通过配置引导到这个文。
-
index.php 文件代码并不多,但是,这里是加载框架其它部分的起点。
-
index.php 文件加载 Composer 生成的自动加载设置,然后从 bootstrap/app.php 脚本中检索 Laravel 应用程序的实例。Laravel 本身采取的第一个动作是创建一个应用程序 / 服务容器。
public/index.php代码
下面附上index.php的代码,方便大家更好的理解
<?php
define('LARAVEL_START', microtime(true));
require __DIR__.'/../vendor/autoload.php';
$app = require_once __DIR__.'/../bootstrap/app.php';
/*
|--------------------------------------------------------------------------
| Run The Application
|--------------------------------------------------------------------------
|
| Once we have the application, we can handle the incoming request
| through the kernel, and send the associated response back to
| the client's browser allowing them to enjoy the creative
| and wonderful application we have prepared for them.
|
*/
$kernel = $app->make(Illuminate\Contracts\Http\Kernel::class);
$response = $kernel->handle(
$request = Illuminate\Http\Request::capture()
);
$response->send();
$kernel->terminate($request, $response);
HTTP / Console内核
接下来, 根据进入应用程序的请求类型来将传入的请求发送到 HTTP 内核或控制台内核。而这两个内核是用来作为所有请求都要通过的中心位置。 现在,我们先看看位于 app/Http/Kernel.php 中的 HTTP 内核。
HTTP 内核继承了 Illuminate\Foundation\Http\Kernel 类,该类定义了一个 bootstrappers 数组。 这个数组中的类在请求被执行前运行,这些 bootstrappers 配置了错误处理,日志,检测应用环境,以及其它在请求被处理前需要执行的任务。
HTTP 内核还定义了所有请求被应用程序处理之前必须经过的 HTTP 中间件。这些中间件处理 HTTP 会话 读写 HTTP session、判断应用是否处于维护模式、验证 CSRF 令牌 等等。
HTTP 内核的 handle 方法签名相当简单:获取一个 Request,返回一个 Response。可以把该内核想象作一个代表整个应用的大黑盒子,输入 HTTP 请求,返回 HTTP 响应。
服务提供者
内核启动操作中最重要的便是我们应用的 服务提供者 了。所有应用下的服务提供者均配置到了 config/app.php 配置文件中的 providers 数组中。第一步,所有服务提供者的 register 方法会被调用,然后一旦所有服务提供者均注册后, boot 方法才被调用。
服务提供者给予框架开启多种多样的组件,像数据库,队列,验证器,以及路由组件。只要被启动服务提供者就可支配框架的所有功能,所以服务提供者也是 Laravel 整个引导周期最重要组成部分。
请求调度
一旦启动且所有服务提供者被注册,Request 会被递送给路由。路由将会调度请求,交给绑定的路由或控制器,也当然包括路由绑定的中间件。
聚焦服务提供者
服务提供者是 Laravel 真正意义的生命周期中的关键。应用实例一旦创建,服务提供者就被注册,然后请求被启动的应用接管。简单吧!
牢牢掌握服务提供者的构建和其对 Laravel 应用处理机制的原理是非常有价值的。当然,我们的应用默认的服务提供会存放在 app/Providers 下面。
默认的,AppServiceProvider 是空白的。这个提供者是一个不错的位置,用于我们添加应用自身的引导处理和服务容器绑定。当然,大型项目中,我们可能希望创建数个粒度更精细的服务提供者。
华丽的分割线
要了解更多有关在Laravel的知识点,请查看我的专栏: 服务端开发从入门到精通
推荐阅读
Last but not least
技术交流群请到 这里来。 或者添加我的微信 wangzhongyang0601 ,一起学习。