Skip to content

Laravel 契约Contracts 详解

这是我参与8月更文挑战的第14天,活动详情查看: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 的 Contracts (契约)

简介

Laravel 的契约是一组接口,它们由框架提供并定义了核心服务。

例如,illuste\Contracts\Queue\Queue 契约定义了排队作业所需的方法,而 illuste\Contracts\Mail\Mailer 契约定义了发送邮件所需的方法。

每个契约都有由框架提供的相应实现。

例如,Laravel 提供了一个包含各种驱动程序的队列实现,还有一个由 SwiftMailer 提供支持的邮件程序实现等等。

所有的 Laravel 契约都存在于 它们各自的 GitHub 仓库

这为所有可用的契约提供了一个快速的参考点,以及一个可以被开发人员使用的独立的包。

契约(Contracts) Vs. 外观(Facades)

Laravel 的 Facades 和辅助函数提供了一种利用 Laravel 服务的简单方法,无需类型提示就可以从服务容器中解析契约。

在大多数情况下,每个 Facade 都有一个等效的契约。

和 Facades(它不要求我们在类的构造函数中引入它们)不同,契约允许我们为类定义显式依赖关系。 一些开发人员更喜欢以这种方式显式定义其依赖项,所以更喜欢使用契约;而另外的开发人员则享受 Facade 带