Учебники

Laravel — Контракты

Контракты Laravel — это набор интерфейсов с различными функциями и основными услугами, предоставляемыми платформой.

Например, Illuminate \ Contracts \ Queue \ Queue contract использует метод, который необходим для очередей заданий, а 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, которая включает в себя параметр с именем Способность и аргументы, которые используют идентификацию пользователя в форме массива .

Вы должны будете определить контракт, как показано в синтаксисе ниже —

interface <contract-name>

Контракты используются как фасады для создания надежных, хорошо протестированных приложений Laravel. Существуют различные практические различия с использованием договоров и фасадов.

Следующий код показывает использование контракта для кэширования хранилища:

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

Контракт не содержит реализации и новых зависимостей; Легко написать альтернативную реализацию указанного контракта, таким образом, пользователь может заменить реализацию кеша без изменения какой-либо базы кода.