Laravel - Contratti

I contratti Laravel sono un insieme di interfacce con varie funzionalità e servizi principali forniti dal framework.

Per esempio, Illuminate\Contracts\Queue\Queue contract utilizza un metodo necessario per accodare i lavori e Illuminate\Contracts\Mail\Mailer utilizza il metodo per inviare e-mail.

Ogni contratto definito include la corrispondente implementazione del framework. Tutti i contratti Laravel sono disponibili nel repository GitHub come indicato di seguito -

https://github.com/illuminate/contracts

Questo repository fornisce una varietà di contratti disponibili nel framework Laravel che possono essere scaricati e utilizzati di conseguenza.

Punti importanti

Mentre lavori con i contratti Laravel, tieni presente i seguenti punti importanti:

  • È obbligatorio definire le facciate nel costruttore di una classe.

  • I contratti sono definiti in modo esplicito nelle classi e non è necessario definire i contratti nei costruttori.

Esempio

Considera il contratto utilizzato per l'autorizzazione in Laravel che è menzionato di seguito -

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

Il contratto utilizza una funzione can che include un file parameter di nome ability e arguments che utilizza l'identificazione dell'utente sotto forma di un file array.

Dovrai definire un contratto come mostrato nella sintassi seguente -

interface <contract-name>

I contratti vengono utilizzati come facciate per creare applicazioni Laravel robuste e ben collaudate. Ce ne sono varipractical differences con utilizzo di contratti e facciate.

Il codice seguente mostra l'utilizzo di un contratto per la memorizzazione nella cache di un repository:

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

Il contratto non contiene implementazioni e nuove dipendenze; è facile scrivere un'implementazione alternativa di un contratto specificato, quindi un utente può sostituire l'implementazione della cache senza modificare alcuna base di codice.