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的参数和一个以数组形式使用用户标识的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;
   }
}

合约不包含任何实现和新的依赖项;编写指定合约的替代实现很容易,因此用户可以替换缓存实现而无需修改任何代码库。