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.