Laravel - Contrats

Les contrats Laravel sont un ensemble d'interfaces avec diverses fonctionnalités et services de base fournis par le framework.

Par exemple, Illuminate\Contracts\Queue\Queue contract utilise une méthode nécessaire pour mettre les jobs en file d'attente et Illuminate\Contracts\Mail\Mailer utilise la méthode d'envoi des e-mails.

Chaque contrat défini comprend la mise en œuvre correspondante du cadre. Tous les contrats Laravel sont disponibles dans le référentiel GitHub comme mentionné ci-dessous -

https://github.com/illuminate/contracts

Ce référentiel fournit une variété de contrats disponibles dans le framework Laravel qui peuvent être téléchargés et utilisés en conséquence.

Les points importants

Lorsque vous travaillez avec des contrats Laravel, veuillez noter les points importants suivants -

  • Il est obligatoire de définir des façades dans le constructeur d'une classe.

  • Les contrats sont explicitement définis dans les classes et vous n'avez pas besoin de définir les contrats dans les constructeurs.

Exemple

Considérez le contrat utilisé pour l'autorisation à Laravel qui est mentionné ci-dessous -

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

Le contrat utilise une fonction can qui comprend un parameter nommé ability et arguments qui utilise l'identification de l'utilisateur sous la forme d'un array.

Vous devrez définir un contrat comme indiqué dans la syntaxe ci-dessous -

interface <contract-name>

Les contrats sont utilisés comme des façades pour créer des applications Laravel robustes et bien testées. Il y a plusieurspractical differences avec l'utilisation de contrats et de façades.

Le code suivant montre l'utilisation d'un contrat pour la mise en cache d'un référentiel -

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

Le contrat ne contient aucune implémentation et de nouvelles dépendances; il est facile d'écrire une implémentation alternative d'un contrat spécifié, ainsi un utilisateur peut remplacer l'implémentation du cache sans modifier aucune base de code.