Laravel - Contratos
Los contratos de Laravel son un conjunto de interfaces con varias funcionalidades y servicios básicos proporcionados por el marco.
Por ejemplo, Illuminate\Contracts\Queue\Queue contrato utiliza un método que es necesario para poner en cola trabajos y Illuminate\Contracts\Mail\Mailer utiliza el método para enviar correos electrónicos.
Cada contrato definido incluye la implementación correspondiente del marco. Todos los contratos de Laravel están disponibles en el repositorio de GitHub como se menciona a continuación:
https://github.com/illuminate/contracts
Este repositorio proporciona una variedad de contratos disponibles en el marco de Laravel que se pueden descargar y usar en consecuencia.
Puntos importantes
Al trabajar con contratos de Laravel, tenga en cuenta los siguientes puntos importantes:
Es obligatorio definir fachadas en el constructor de una clase.
Los contratos se definen explícitamente en las clases y no es necesario definir los contratos en los constructores.
Ejemplo
Considere el contrato utilizado para la Autorización en Laravel que se menciona a continuación:
<?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 = []);
}
El contrato utiliza una función que incluye un parameter llamado ability y arguments que utiliza la identificación del usuario en forma de array.
Tendrá que definir un contrato como se muestra en la siguiente sintaxis:
interface <contract-name>
Los contratos se utilizan como fachadas para crear aplicaciones Laravel sólidas y bien probadas. Hay variospractical differences con uso de contratos y fachadas.
El siguiente código muestra el uso de un contrato para almacenar en caché un repositorio:
<?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;
}
}
El contrato no contiene implementación y nuevas dependencias; Es fácil escribir una implementación alternativa de un contrato específico, por lo que un usuario puede reemplazar la implementación de la caché sin modificar ninguna base de código.