合同(Contracts)
优质
小牛编辑
133浏览
2023-12-01
Laravel契约是一组具有各种功能的接口和框架提供的核心服务。
例如, Illuminate\Contracts\Queue\Queue合约使用排队作业所需的方法, Illuminate\Contracts\Mail\Mailer使用该方法发送电子邮件。
定义的每个合同都包括框架的相应实现。 所有Laravel合同都可以在GitHub存储库中找到,如下所述 -
https://github.com/illuminate/contracts
该存储库提供了Laravel框架中可用的各种合同,可以相应地下载和使用。
重点
在使用Laravel合同时,请注意以下要点 -
必须在类的构造函数中定义外观。
合同在类中明确定义,您无需在构造函数中定义合同。
例子 (Example)
考虑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的parameter和使用array形式的用户标识的arguments 。
您必须定义合同,如下面的语法所示 -
interface <contract-name>
合同像外墙一样用于创建经过充分测试的强大Laravel应用程序。 合同和外墙的使用存在各种practical differences 。
以下代码显示使用合同缓存存储库 -
<?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;
}
}
合同不包含任何实现和新依赖项; 编写指定契约的替代实现很容易,因此用户可以在不修改任何代码库的情况下替换缓存实现。