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;
   }
}

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

广告