Laravel Contracts


Laravel contracts 是一组具有各种功能的接口和框架提供的核心服务。

例如,Illuminate\Contracts\Queue\Queue contracts 使用的是排队作业的方法,Illuminate\Contracts\Mail\Mailer使用的是发送电子邮件的方法。

每个 contracts 的定义都包括相应的框架实现,所有的Laravel contracts 都可以在GitHub仓库中找到,https://github.com/illuminate/contracts,这个资源库提供了Laravel框架中的各种 contracts 下载使用。

要点


在使用 Laravel contracts 时,请注意以下要点:

  • 在类的构造函数中定义facades是强制性的;

  • contracts 在类中明确定义,你不需要在构造函数中定义 contracts。

考虑下面提到的 Laravel 中用于授权的 contracts :

<?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 = []);
}

该 contracts 使用一个函数can,其中参数包括ability和arguments,该arguments是使用数组形式的用户标识。

定义一个 contracts 的语法,如下所示:

interface <contract-name>

contracts 就像外墙一样用于创建健壮的、经过良好测试的 Laravel 应用程序。

以下代码展示了使用 contracts 来缓存库:

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

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