Laravel - Contratos

Os contratos do Laravel são um conjunto de interfaces com várias funcionalidades e serviços essenciais fornecidos pelo framework.

Por exemplo, Illuminate\Contracts\Queue\Queue contrato usa um método que é necessário para enfileirar trabalhos e Illuminate\Contracts\Mail\Mailer usa o método para enviar e-mails.

Cada contrato definido inclui a implementação correspondente da estrutura. Todos os contratos do Laravel estão disponíveis no repositório GitHub conforme mencionado abaixo -

https://github.com/illuminate/contracts

Este repositório fornece uma variedade de contratos disponíveis no framework Laravel que podem ser baixados e usados ​​de acordo.

Pontos importantes

Ao trabalhar com contratos Laravel, observe os seguintes pontos importantes -

  • É obrigatório definir fachadas no construtor de uma classe.

  • Os contratos são definidos explicitamente nas classes e você não precisa definir os contratos nas construtoras.

Exemplo

Considere o contrato usado para Autorização no Laravel que é mencionado abaixo -

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

O contrato usa uma função que inclui um parameter nomeado ability e arguments que usa a identificação do usuário na forma de um array.

Você terá que definir um contrato conforme mostrado na sintaxe abaixo -

interface <contract-name>

Os contratos são usados ​​como fachadas para a criação de aplicativos Laravel robustos e bem testados. Existem váriospractical differences com uso de contratos e fachadas.

O código a seguir mostra o uso de um contrato para armazenar em cache um repositório -

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

O contrato não contém nenhuma implementação e novas dependências; é fácil escrever uma implementação alternativa de um contrato especificado, portanto, um usuário pode substituir a implementação do cache sem modificar qualquer base de código.