本文目录导读:

Laravel 契约(Contracts)是框架核心接口的集合,定义了关键服务的约定,其内置实现主要对应框架的各个核心组件,以下是主要的契约及其具体实现类:
核心契约与实现
认证与授权
Illuminate\Contracts\Auth\Guard→SessionGuard,TokenGuardIlluminate\Contracts\Auth\PasswordBroker→PasswordBrokerIlluminate\Contracts\Auth\Factory→AuthManagerIlluminate\Contracts\Auth\Access\Gate→Gate
缓存
Illuminate\Contracts\Cache\Repository→CacheManager,RedisStore,FileStore,DatabaseStoreIlluminate\Contracts\Cache\Factory→CacheManagerIlluminate\Contracts\Cache\LockProvider→RedisLock,DatabaseLock
日志
Illuminate\Contracts\Logging\Log→LogManagerPsr\Log\LoggerInterface→Logger
邮件
Illuminate\Contracts\Mail\Mailer→MailerIlluminate\Contracts\Mail\MailQueue→Mailer
队列
Illuminate\Contracts\Queue\Queue→DatabaseQueue,RedisQueue,SqsQueue,BeanstalkdQueueIlluminate\Contracts\Queue\Factory→QueueManagerIlluminate\Contracts\Queue\ShouldQueue(无具体实现,标记接口)
数据库
Illuminate\Contracts\Database\ModelIdentifier→ModelIdentifierIlluminate\Contracts\Database\Query\Builder→Builder
文件系统
Illuminate\Contracts\Filesystem\Filesystem→FilesystemAdapterIlluminate\Contracts\Filesystem\Cloud→CloudFilesystemAdapterIlluminate\Contracts\Filesystem\Factory→FilesystemManager
Redis
Illuminate\Contracts\Redis\Factory→RedisManagerIlluminate\Contracts\Redis\Connection→PredisConnection,PhpRedisConnection
HTTP
Illuminate\Contracts\Http\Kernel→KernelIlluminate\Contracts\Routing\Registrar→RouterIlluminate\Contracts\Routing\ResponseFactory→ResponseFactoryIlluminate\Contracts\Routing\UrlGenerator→UrlGenerator
视图与模板
Illuminate\Contracts\View\Factory→ViewFactoryIlluminate\Contracts\View\View→View
容器
Illuminate\Contracts\Container\Container→ContainerIlluminate\Contracts\Container\BindingResolutionException→BindingResolutionException
事件
Illuminate\Contracts\Events\Dispatcher→EventDispatcherIlluminate\Contracts\Broadcasting\Broadcaster→BroadcastManager,RedisBroadcaster
配置
Illuminate\Contracts\Config\Repository→ConfigRepository
加密
Illuminate\Contracts\Encryption\Encrypter→EncrypterIlluminate\Contracts\Encryption\DecryptException→DecryptException
使用示例
use Illuminate\Contracts\Cache\Repository as CacheContract;
class ReportController {
public function index(CacheContract $cache) {
// 实际注入的是 CacheManager 或其底层实现
return $cache->remember('report', 3600, function() {
return $this->generateReport();
});
}
}
绑定关系
这些绑定通常在 Illuminate\Foundation\Application 的 registerCoreContainerAliases() 方法或服务提供者中注册。
// 在 CacheServiceProvider 中
$this->app->singleton('cache', function ($app) {
return new CacheManager($app);
});
$this->app->singleton('cache.store', function ($app) {
return $app['cache']->driver();
});
使用契约而非具体实现的优势:
- 解耦:代码依赖于接口而非具体类
- 可测试:容易使用 Mock 或替换实现
- 灵活性:切换驱动时无需修改业务代码