
- Laravel 教程
- Laravel - 首页
- Laravel - 概述
- Laravel - 安装
- Laravel - 应用结构
- Laravel - 配置
- Laravel - 路由
- Laravel - 中间件
- Laravel - 命名空间
- Laravel - 控制器
- Laravel - 请求
- Laravel - Cookie
- Laravel - 响应
- Laravel - 视图
- Laravel - Blade 模板
- Laravel - 重定向
- Laravel - 数据库操作
- Laravel - 错误 & 日志
- Laravel - 表单
- Laravel - 本地化
- Laravel - 会话
- Laravel - 验证
- Laravel - 文件上传
- Laravel - 发送邮件
- Laravel - Ajax
- Laravel - 错误处理
- Laravel - 事件处理
- Laravel - 门面
- Laravel - 合同
- Laravel - CSRF 保护
- Laravel - 认证
- Laravel - 授权
- Laravel - Artisan 控制台
- Laravel - 加密
- Laravel - 哈希
- 理解发布流程
- Laravel - 客人用户权限
- Laravel - Artisan 命令
- Laravel - 分页自定义
- Laravel - Dump Server
- Laravel - Action URL
- Laravel 有用资源
- Laravel - 快速指南
- Laravel - 有用资源
- Laravel - 讨论
Laravel - 合同
Laravel 合同是一组接口,包含框架提供的各种功能和核心服务。
例如,Illuminate\Contracts\Queue\Queue 合同使用一个用于队列作业的方法,而 Illuminate\Contracts\Mail\Mailer 使用一个用于发送邮件的方法。
每个定义的合同都包含框架相应的实现。所有 Laravel 合同都可以在以下提到的 GitHub 仓库中找到:
https://github.com/illuminate/contracts
此仓库提供了 Laravel 框架中可用的各种合同,可以下载并根据需要使用。
要点
在使用 Laravel 合同时,请注意以下要点:
必须在类的构造函数中定义门面。
合同在类中显式定义,无需在构造函数中定义合同。
示例
考虑下面提到的 Laravel 中用于授权的合同:
<?php namespace Illuminate\Contracts\Auth\Access; interface Authorizable{ /** * Determine if the entity has a given ability. * * @param string $ability * @param array|mixed $arguments * @return bool */ public function can($ability, $arguments = []); }
该合同使用一个名为 can 的函数,其中包含一个名为 ability 的参数和一个使用用户标识(以数组形式)的参数。
您需要按照以下语法定义合同:
interface <contract-name>
合同类似于门面,用于创建健壮且经过良好测试的 Laravel 应用程序。在使用合同和门面方面存在各种实际差异。
以下代码演示了如何使用合同来缓存存储库:
<?php namespace App\Orders; use Illuminate\Contracts\Cache\Repository as Cache; class Repository{ /** * The cache instance. */ protected $cache; /** * Create a new repository instance. * * @param Cache $cache * @return void */ public function __construct(Cache $cache) { $this->cache = $cache; } }
合同不包含任何实现和新依赖项;很容易编写指定合同的替代实现,因此用户可以替换缓存实现而无需修改任何代码库。
广告