Laravel 8 新特性: 动态Blade组件、事件监听器优化、事件测试助手
这是我参与8月更文挑战的第5天,活动详情查看: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 继续进行了改善。
今天重点介绍 动态Blade组件、事件监听器优化、事件测试助手 相关的知识点
动态 Blade 组件
有时我们需要渲染一个组件,但是不确定在运行时应该渲染哪个组件。在这种情况下,我们现在可以使用 Laravel 内置的 dynamic-component 组件去根据运行时的某个值或某个变量来动态渲染组件:
<x-dynamic-component :component="$componentName" class="mt-4" />事件监听器优化
现在可以通过给 Event::listen 方法传入一个闭包函数来简单的注册一个基于闭包的事件监听器。Laravel 会检查闭包以确定监听器处理的事件类型。
use App\Events\PodcastProcessed; use Illuminate\Support\Facades\Event; Event::listen(function (PodcastProcessed $event) { // });此外,现在可以使用 Illumate\Events\Queueable 函数将基于闭包的事件监听器标记为可排队:
use App\Events\PodcastProcessed; use function Illuminate\Events\queueable; use Illuminate\Support\Facades\Event; Event::listen(queueable(function (PodcastProcessed $event) { // }));像队列任务一样,我们可以使用 onConnection、onQueue 和 delay 方法自定义队列监听器的执行:
Event::listen(queueable(function (PodcastProcessed $event) { // })->onConnection('redis')->onQueue('podcasts')->delay(now()->addSeconds(10)));如果我们想处理匿名队列的监听器故障,可以在定义 queueable 监听器时给 catch 方法提供一个闭包:
use App\Events\PodcastProcessed; use function Illuminate\Events\queueable; use Illuminate\Support\Facades\Event; use Throwable; Event::listen(queueable(function (PodcastProcessed $event) { // })->catch(function (PodcastProcessed $event, Throwable $e) { // The queued listener failed... }));时间测试助手
测试时,我们有时可能需要修改诸如 now 或 Illuminate\Support\Carbon::now() 之类的函数返回的时间。 Laravel 的基本功能测试类现在包括时间测试助手函数,我们可以使用它们来操纵当前时间:
public function testTimeCanBeManipulated() { // 时间穿越至未来... $this->travel(5)->milliseconds(); $this->travel(5)->seconds(); $this->travel(5)->minutes(); $this->travel(5)->hours(); $this->travel(5)->days(); $this->travel(5)->weeks(); $this->travel(5)->years(); // 时间穿越至过去... $this->travel(-5)->hours(); // 前往明确的时间... $this->travelTo(now()->subHours(6)); // 回到当前时间... $this->travelBack(); }华丽的分割线
要了解更多有关在Laravel的知识点,请查看我的专栏: 服务端开发从入门到精通
推荐阅读
Last but not least
技术交流群请到 这里来。 或者添加我的微信 wangzhongyang0601 ,一起学习。
