跳至内容

Contracts

介绍

Laravel 的“契约”是一组接口,用于定义框架提供的核心服务。例如,一个Illuminate\Contracts\Queue\Queue契约定义了队列任务所需的方法,另一个Illuminate\Contracts\Mail\Mailer契约定义了发送电子邮件所需的方法。

每个契约都有框架提供的相应实现。例如,Laravel 提供了包含多种驱动程序的队列实现,以及由Symfony Mailer支持的邮件程序实现。

所有 Laravel 合约都位于各自的 GitHub 仓库中。这为所有可用合约提供了快速参考点,同时也提供了一个单一、解耦的包,可在构建与 Laravel 服务交互的包时使用。

契约与外观

Laravel 的Facades和辅助函数提供了一种使用 Laravel 服务的简单方法,无需在服务容器外进行类型Prompts和解析契约。大多数情况下,每个 Facades 都有一个等效的契约。

与 Facades 不同,Facades 不需要您在类的构造函数中引用它们,而 Contracts 允许您为类定义显式依赖项。有些开发者更喜欢以这种方式显式定义依赖项,因此更喜欢使用 Contracts,而其他开发者则更享受 Facades 的便利性。通常,大多数应用程序在开发过程中都可以毫无问题地使用 Facades。

何时使用Contracts

使用契约还是 Facade 取决于个人喜好以及开发团队的喜好。契约和 Facade 都可以用来创建健壮且经过良好测试的 Laravel 应用程序。契约和 Facade 并不互相排斥。应用程序的某些部分可能使用 Facade,而其他部分则依赖于契约。只要你专注于类的职责,你就会发现使用契约和 Facade 之间几乎没有实际区别。

一般来说,大多数应用程序在开发过程中使用 Facades 不会出现任何问题。如果您正在构建一个与多个 PHP 框架集成的包,您可能希望使用该illuminate/contracts包来定义与 Laravel 服务的集成,而无需在包文件中引用 Laravel 的具体实现composer.json

如何使用Contracts

那么,如何获得合约的实现呢?其实很简单。

Laravel 中的许多类都是通过服务容器解析的,包括控制器、事件监听器、中间件、队列任务,甚至路由闭包。因此,要获取契约的实现,只需在被解析类的构造函数中“类型Prompts”接口即可。

例如,看一下这个事件监听器:

1<?php
2 
3namespace App\Listeners;
4 
5use App\Events\OrderWasPlaced;
6use App\Models\User;
7use Illuminate\Contracts\Redis\Factory;
8 
9class CacheOrderInformation
10{
11 /**
12 * Create the event listener.
13 */
14 public function __construct(
15 protected Factory $redis,
16 ) {}
17 
18 /**
19 * Handle the event.
20 */
21 public function handle(OrderWasPlaced $event): void
22 {
23 // ...
24 }
25}

当事件监听器解析后,服务容器将读取类构造函数中的类型Prompts,并注入适当的值。要了解更多关于在服务容器中注册内容的信息,请查看其文档

合约编号

下表提供了所有 Laravel 契约及其等效外观的快速参考:

Contracts 参考 Facade
照亮\Contracts\授权\访问\可授权  
照亮\Contracts\授权\访问\门 Gate
Illuminate\Contracts\Auth\Authenticatable  
Illuminate\Contracts\Auth\CanResetPassword  
照亮\Contracts\授权\Factories Auth
照亮\Contracts\授权\守卫 Auth::guard()
Illuminate\Contracts\Auth\PasswordBroker Password::broker()
照亮\Contracts\授权\密码代理Factories Password
Illuminate\Contracts\Auth\StatefulGuard  
Illuminate\Contracts\Auth\SupportsBasicAuth  
Illuminate\Contracts\Auth\UserProvider  
照亮\Contracts\广播\广播员 Broadcast::connection()
照亮\Contracts\广播\Factories Broadcast
照亮\Contracts\广播\应该广播  
照亮\Contracts\广播\现在应该广播  
照亮\Contracts\巴士\调度员 Bus
Illuminate\Contracts\Bus\QueueingDispatcher Bus::dispatchToQueue()
照亮\Contracts\缓存\Factories Cache
照亮\Contracts\缓存\锁定  
Illuminate\Contracts\Cache\LockProvider  
照亮\Contracts\缓存\存储库 Cache::driver()
照亮\Contracts\缓存\存储  
照亮\Contracts\配置\存储库 Config
照亮\Contracts\控制台\应用程序  
照亮\Contracts\控制台\内核 Artisan
照亮\Contracts\容器\容器 App
照亮\Contracts\Cookie\Factories Cookie
照亮\Contracts\Cookie\QueueingFactory Cookie::queue()
照亮\Contracts\数据库\模型标识符  
照亮\Contracts\调试\异常处理程序  
Illuminate\Contracts\Encryption\Encrypter Crypt
Illuminate\Contracts\Events\Dispatcher Event
Illuminate\Contracts\Filesystem\Cloud Storage::cloud()
照亮\Contracts\文件系统\Factories Storage
Illuminate\Contracts\Filesystem\Filesystem Storage::disk()
照亮\Contracts\基金会\申请 App
Illuminate\Contracts\Hashing\Hasher Hash
照亮\Contracts\ Http \内核  
Illuminate\Contracts\Mail\Mailable  
照亮\Contracts\邮件\邮件器 Mail
照亮\Contracts\邮件\邮件队列 Mail::queue()
Illuminate\Contracts\Notifications\Dispatcher Notification
照亮\Contracts\通知\Factories Notification
Illuminate\Contracts\Pagination\LengthAwarePaginator  
Illuminate\Contracts\Pagination\Paginator  
照亮\Contracts\Pipeline\枢纽  
照亮\Contracts\Pipeline\Pipeline Pipeline
Illuminate\Contracts\Queue\EntityResolver  
照亮\Contracts\队列\Factories Queue
照亮\Contracts\队列\工作  
照亮\Contracts\队列\监控 Queue
照亮\Contracts\队列\队列 Queue::connection()
照亮\Contracts\队列\QueueableCollection  
Illuminate\Contracts\Queue\QueueableEntity  
照亮\Contracts\队列\ShouldQueue  
Illuminate\Contracts\Redis\Factory Redis
照亮\Contracts\路由\绑定注册器 Route
照亮\Contracts\路由\注册器 Route
照亮\Contracts\路由\响应Factories Response
照亮\Contracts\路由\UrlGenerator URL
照亮\Contracts\路由\UrlRoutable  
照亮\Contracts\会话\会话 Session::driver()
照亮\Contracts\支持\阵列  
照亮\Contracts\支持\Htmlable  
Illuminate\Contracts\Support\Jsonable  
照亮\Contracts\支持\消息包  
Illuminate\Contracts\Support\MessageProvider  
照亮\Contracts\支持\可渲染  
照亮\Contracts\支持\负责  
照亮\Contracts\翻译\加载器  
Illuminate\Contracts\翻译\翻译员 Lang
照亮\Contracts\验证\Factories Validator
Illuminate\Contracts\Validation\ValidatesWhenResolved  
Illuminate\Contracts\Validation\ValidationRule  
Illuminate\Contracts\Validation\Validator Validator::make()
照亮\Contracts\视图\引擎  
照亮\Contracts\查看\Factories View
照亮\Contracts\查看\查看 View::make()