Skip to content

Laravel 8 新特性之:优化维护模式、闭包分发和链式catch ​

这是我参与8月更文挑战的第4天,活动详情查看: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 Jetstream和模型工厂类在上一篇已经介绍过了,大家可以查看 竟然有人质疑我还在用Laravel开发?别忘了PHP是最好的语言。(1)

迁移压缩,队列批处理,改善速率限制在这一篇中介绍过,大家可以查看 竟然有人质疑我还在用Laravel开发?别忘了PHP是最好的语言。(2)

维护模式优化 ​

在之前的 Laravel 版本中,php artisan down 开启的维护模式可以通过建立一个 IP 地址白名单来绕过,在白名单中的 IP 地址可以正常访问应用。在新版本中这个特性被移除了,取而代之的是一个简单的「密码」或者说 token 方案。

在维护模式下,你可以通过 secret 选项生成一个可以绕过维护模式的 token:

sql
php artisan down
-- secret="xxxx-xxxx-xxxx-xxxx-xxxxxxxxxx"

将应用设置为维护模式后,你可以带上这个 token 访问应用程序的 URL,然后 Laravel 将会在浏览器中写入一个能绕过维护模式的 cookie:

arduino
https://example.com/xxxx-xxxx-xxxx-xxxx-xxxxxxxxxx

通过这个隐藏路由,你会被重定向到应用的 / 路由。一旦 cookie 被写入浏览器,你就可以像没开启维护模式一样正常的访问应用。

预渲染维护模式视图 ​

如果你在部署时使用了 php artisan down,你的用户又在更新 composer 依赖或其他基础视图时访问应用,可能偶尔还是会出错。出现这种情况是因为 Laravel 必须先启动一些核心的功能,来确定你的应用是否处于维护模式,然后用模板引擎渲染维护模式视图。

由于这个原因,Laravel 现在允许你在请求的生命周期的最开始预渲染一个维护模式视图。这个视图会在应用的任何依赖加载之前渲染。你可以使用 down 命令的 render 选项选择一个预渲染模板:

sql
php artisan down
-- render="errors::503"

闭包分发 / 链式 catch ​

使用新增的 catch 方法,你现在可以规定一个闭包函数来监听某个闭包队列。当闭包队列耗尽了队列配置的所有重置次数后还没有完全成功,就执行闭包函数:

php
use Throwable;
dispatch(function () use ($podcast) {     $podcast->publish();
})->catch(function (Throwable $e) {     // 任务失败
});

相关阅读 ​

Laravel代码简洁之道和性能优化

学习群请点这里,一起学习,共同进步!!!

image.png

AI 应用开发训练营 · 现在开始

别只收藏 AI 文章,今天就做出第一个能上线的项目

文章解决认知,项目才证明能力。把 Agent、RAG、MCP 变成可运行、可展示、可面试表达的成果,现在就从一次岗位准备度自测开始。

立即开始 AI 岗位准备度自测 查看训练营路线
真实学员成果先看成果,再决定是否开始 →
  1. 01选方向
  2. 02做项目
  3. 03出成果
  4. 04拿面试