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.