Laravel 契约

laravel契约是一套由框架提供的各种功能和核心服务的接口。

例如, illuminate \ contracts \ queue \ queue 合同使用排队作业所需的方法, illuminate \ contracts \ mail \ mailer 使用该方法发送电子邮件。

每个定义的合同都包含相应的框架实施。所有的laravel合同都可以在github仓库中找到,如下所述 -

https://github.com/illuminate/contracts

该存储库提供了laravel框架中可用的各种合约,可以相应地下载和使用它们。

 

重点

在处理laravel合同时,请注意以下重要事项 -

  • 在类的构造函数中定义外墙是强制性的。

  • 合同在类中明确定义,您不需要在构造函数中定义合同。

考虑下面提到的用于laravel授权的合同 -

 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  

合同的使用类似于facade,用于创建强大的,经过良好测试的laravel应用程序。合同和外墙的使用有各种 实际的差异 。

以下代码显示了如何使用合同来缓存存储库 -

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

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

相关文章