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 的替换实现很容易,因此用户可以在不修改任何代码库的情况下替换缓存实现。