最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 竟然有人质疑我还在用Laravel开发?别忘了PHP是最好的语言。(5) 动态Blade 事件监听器优化 事件测试助手

    正文概述 转载于:掘金(王中阳Go)   2021-08-19   569

    这是我参与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版本)的新特性:

    今天重点介绍 动态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的知识点,请查看我的专栏: 服务端开发从入门到精通

    推荐阅读

    1. 竟然有人质疑我还在用Laravel开发?别忘了PHP是最好的语言。(1)Laravel如何优雅的设置全局变量

    2. 竟然有人质疑我还在用Laravel开发?别忘了PHP是最好的语言。(2)Laravel Jetstream和模型工厂类

    3. 竟然有人质疑我还在用Laravel开发?别忘了PHP是最好的语言。(3)迁移压缩,队列批处理,改善速率限制

    4. 竟然有人质疑我还在用Laravel开发?别忘了PHP是最好的语言。(4)维护模式优化

    Last but not least

    技术交流群请到 这里来。 或者添加我的微信 wangzhongyang0601 ,一起学习。


    起源地下载网 » 竟然有人质疑我还在用Laravel开发?别忘了PHP是最好的语言。(5) 动态Blade 事件监听器优化 事件测试助手

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元