Laravel - Contracts(契约)
Laravel Contracts (契约)是一组接口,具有框架提供的各种功能和核心服务。
例如,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 的 参数 和使用 数组 形式的用户标识的 arguments。
您必须按照以下语法定义合约 −
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;
}
}
契约不包含任何实现和新的依赖项;很容易编写指定契约的替代实现,因此用户无需修改任何代码库即可替换缓存实现。

