¿Qué es Facades en Laravel y cómo funciona?
Laravel viene con muchas funciones útiles, así que hoy les dejaré saber qué es realmente Facades (fachadas), cómo funciona y qué alternativas tiene.
De la definición oficial de Laravel,
- Las fachadas proporcionan una interfaz “estática” para las clases que están disponibles en el contenedor de servicios de la aplicación.
- Las fachadas de Laravel sirven como “proxies estáticos” para las clases subyacentes en el contenedor de servicios.
- Laravel se envía con muchas fachadas que brindan acceso a casi todas las funciones de Laravel. Los ejemplos de fachadas incluyen Vista, Ruta, Respuesta, Configuración, Autenticación y muchos más. Verifique la lista de fachadas proporcionada por Laravel en la siguiente captura de pantalla.
Ahora entendamos Fachadas en Detalle,
Un Facades en palabras simples es algo que proporciona una interfaz estática a los métodos de clases que están vinculados en el contenedor de servicios, un Facades hace esto usando un método mágico. Puede consultar este artículo para obtener más información sobre Service Container.
¿Cuándo usar fachadas?
- Las fachadas proporcionan una sintaxis corta y fácil de recordar que te permite usar las características de Laravel sin recordar nombres de clase largos que deben inyectarse o configurarse manualmente.
- Dado que las fachadas son tan fáciles de usar y no requieren inyección, puede ser fácil dejar que sus clases continúen creciendo y usar muchas fachadas en una sola clase.
¿Cómo funciona Facades en Laravel?
- Cada servicio dentro del contenedor de Laravel tiene un nombre único, para acceder a un servicio directamente desde el contenedor, podemos usar el método App::make() o la función auxiliar app().
- Eche un vistazo al siguiente ejemplo,
App::make('some_service')->methodName();
- Como Facades proporciona una interfaz estática, puede usarla directamente con la ayuda del operador de resolución de alcance. Compruebe a continuación la sintaxis,
someService::methodName();==> Here "someService" is Facade Class and "methodName" is Static method of that Facade.
- Cada clase Facade amplía la clase Base Facade que se encuentra en Illuminate/Support Package. y la clase Facade interactúa con un solo método que es getFacadeAccessor(), que devuelve el nombre del servicio. Compruebe la imagen de abajo para una mayor comprensión,
- Según la clave devuelta por esta función, Laravel encuentra el servicio apropiado del contenedor de servicios.
- Haga clic aquí para ver la lista de la clase que está utilizando Facade en particular.
- Puede crear su fachada personalizada y vincular la lógica personalizada para esa fachada. Solo tiene que registrar esta fachada personalizada en la matriz de alias (aliases array) del archivo config/app.php.
Ahora comprendamos cómo se llama a la clase Base Facade y cómo funciona.
- La clase Base Facade tiene una implementación de la función mágica __callStatic().
- Este método mágico nos ayuda a obtener el servicio del contenedor, vea la sintaxis a continuación,
public static function __callStatic($name, $args){ return app()->make(static::getFacadeAccessor())->$name(); }
¿Cómo maneja Laravel todas las fachadas?
- Laravel maneja todas estas fachadas usando alias. Todos los nombres de alias se almacenan en una matriz de alias dentro del archivo de configuración app.php, que se encuentra dentro del directorio de configuración de su proyecto.
- Cuando la aplicación Laravel se inicia, itera a través de todos los elementos de la matriz de alias con la ayuda de AliasLoader y crea una cola de funciones __autoload y cada función __autoload() es responsable de crear un alias para la clase Facade respectiva.
- Debido a esta funcionalidad de Laravel, no tendremos que importar y alias las clases antes de usarlas, podemos acceder a ellas directamente.
Alternativa de Fachadas
- ¿Qué sucede si no queremos llamar al método en la clase Fachadas? Entonces, la alternativa son las funciones auxiliares.
- Para complementar Facades, Laravel ofrece una variedad de “funciones auxiliares” globales que facilitan aún más la interacción con las características comunes de Laravel. Entendámoslo usando un ejemplo,
- Por ejemplo, en lugar de usar Illuminate\Support\Facades\Response Facade para generar una respuesta JSON, podemos simplemente usar la función auxiliar response()
- Debido a que las funciones auxiliares están disponibles en todo el mundo, no necesita importar ninguna clase para poder usarlas, verifique el fragmento de código a continuación para comprender las fachadas y las funciones auxiliares.
use Illuminate\Support\Facades\Response;Route::get('/users', function () { return Response::json([ // Here we have used Response Facade ]); });Route::get('/users', function () { return response()->json([ // Here we have used response() helper ]); });
- No hay absolutamente ninguna diferencia práctica entre las funciones Facades y Helper.
¡Eso es todo! Si tiene alguna otra pregunta, no dude en dejar sus pensamientos en los comentarios a continuación y no olvide aplaudir si le gustó.
Gracias por llegar hasta aquí, si encuentras esto útil no olvides aplaudir 👍🏼suscribirse para recibir más contenido.
Si le interesa, puede echar un vistazo a algunos de los otros artículos que he escrito recientemente sobre AWS y Laravel: