Laravel - kontrakty

Kontrakty Laravel to zestaw interfejsów z różnymi funkcjonalnościami i podstawowymi usługami świadczonymi przez framework.

Na przykład, Illuminate\Contracts\Queue\Queue kontrakt używa metody, która jest potrzebna do kolejkowania zadań i Illuminate\Contracts\Mail\Mailer korzysta z metody wysyłania e-maili.

Każda zdefiniowana umowa zawiera odpowiednie wdrożenie ram. Wszystkie kontrakty Laravel są dostępne w repozytorium GitHub, jak wspomniano poniżej -

https://github.com/illuminate/contracts

To repozytorium zapewnia różnorodne kontrakty dostępne w ramach Laravel, które można pobrać i odpowiednio wykorzystać.

Ważne punkty

Podczas pracy z kontraktami Laravel zwróć uwagę na następujące ważne punkty -

  • Definiowanie elewacji w konstruktorze klasy jest obowiązkowe.

  • Kontrakty są jawnie definiowane w klasach i nie trzeba ich definiować w konstruktorach.

Przykład

Rozważ kontrakt używany do autoryzacji w Laravel, o którym mowa poniżej -

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

Kontrakt wykorzystuje funkcję puszki, która zawiera plik parameter o imieniu ability i arguments który wykorzystuje identyfikację użytkownika w postaci pliku array.

Będziesz musiał zdefiniować kontrakt, jak pokazano w składni poniżej -

interface <contract-name>

Kontrakty są używane jak fasady do tworzenia solidnych, dobrze przetestowanych aplikacji Laravel. Są różnepractical differences z wykorzystaniem umów i fasad.

Poniższy kod przedstawia użycie kontraktu do buforowania repozytorium -

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

Kontrakt nie zawiera implementacji i nowych zależności; łatwo jest napisać alternatywną implementację określonego kontraktu, dzięki czemu użytkownik może zastąpić implementację pamięci podręcznej bez modyfikowania jakiejkolwiek bazy kodu.