Laravel - 合约

  • 简述

    Laravel 合约是框架提供的具有各种功能和核心服务的一组接口。
    例如,Illuminate\Contracts\Queue\Queue合约使用排队作业所需的方法,并且Illuminate\Contracts\Mail\Mailer使用发送电子邮件的方法。
    定义的每个合约都包含框架的相应实现。所有 Laravel 合约都可以在 GitHub 存储库中找到,如下所述 -
    该存储库提供了 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,其中包括parameter命名的abilityarguments它以以下形式使用用户标识array.
    您必须定义一个合约,如下面的语法所示 -
    
    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;
       }
    }
    
    合约不包含任何实现和新的依赖项;编写指定合约的替代实现很容易,因此用户可以替换缓存实现而无需修改任何代码库。