Laravel Contracts合同
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|mixedarguments
* @return bool
*/
public function can(ability,arguments = []);
}
合约使用一个函数,该函数包含一个名为 ability 的参数和使用用户标识的 数组 形式的参数 arguments 。
您需要按照下面的语法来定义一个合约−
interface <contract-name>
使用合同(contracts)就像创建健壮、经过充分测试的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 Cachecache
* @return void
*/
public function __construct(Cache cache) {this->cache = $cache;
}
}
合同不包含实现和新依赖关系;编写指定合同的替代实现很容易,因此用户可以在不修改任何代码库的情况下替换缓存实现。