Laravel - Контракты
Контракты Laravel - это набор интерфейсов с различными функциями и основными услугами, предоставляемыми фреймворком.
Например, Illuminate\Contracts\Queue\Queue контракт использует метод, который необходим для постановки заданий в очередь и Illuminate\Contracts\Mail\Mailer использует метод отправки электронных писем.
Каждый определенный контракт включает соответствующую реализацию структуры. Все контракты Laravel доступны в репозитории GitHub, как указано ниже -
https://github.com/illuminate/contracts
Этот репозиторий предоставляет множество контрактов, доступных в среде 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 названный ability и arguments который использует идентификацию пользователя в виде 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;
}
}
Контракт не содержит реализации и новых зависимостей; легко написать альтернативную реализацию указанного контракта, таким образом, пользователь может заменить реализацию кеширования без изменения какой-либо базы кода.