当前位置: 首页 > 文档资料 > Laravel 入门教程 >

合同(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,其中包括名为abilityparameter和使用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;
   }
}

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