7 days of WordPress plugins, themes & templates - for free!* Unlimited asset downloads! Start 7-Day Free Trial
Advertisement
  1. Code
  2. Laravel 5

¿Qué son las Facades de Laravel 5.0?

Scroll to top
Read Time: 5 mins

Spanish (Español) translation by Elías Nicolás (you can also view the original English article)

Los patrones de diseño de software se definen mejor en las palabras de Martin Fowler:

Los patrones proporcionan un mecanismo para representar el asesoramiento de diseño en un formato de referencia. Diseño de software es un tema masivo, y cuando se enfrenta con un problema de diseño, debe ser capaz de centrarse en algo tan cerca del problema como usted puede conseguir.

El código que emplea patrones de diseño es fácil de entender, mantener y extender. El propósito de este tutorial es promover las facade en Laravel.

¿Cuál es el patrón de la Facade?

De acuerdo con la definición de la Banda de los Cuatro, el patrón de diseño de la facade es un patrón estructural que define una interfaz simplificada a un subsistema más complejo. El patrón se basa en la creación de una interfaz de facade simple delante de la colección de lógica y métodos requeridos. La propia facade mantiene las dependencias.

La facade es muy similar a los patrones del adaptador y del decorador. El adaptador actúa como un puente entre dos interfaces que no son compatibles, mientras que el decorador es más complejo y se utiliza para cambiar dinámicamente la forma en que se comportan los objetos.

¿Qué son las Facades de Laravel?

Sweet sintaxis, que Laravel utiliza, hace que la escritura de código más limpio y más fácil de entender. Las facades de Laravel son en realidad el azúcar sintáctico para la ubicación del servicio.

Echemos un vistazo a Laravel Facade y su funcionamiento. La fachada de cache en Laravel tiene este aspecto:

Aunque parece que está utilizando una carga de métodos estáticos, Laravel realmente proporciona una interfaz a las clases que están disponibles en el contenedor de servicio de la aplicación. Como probablemente ya sepa, el código escrito anteriormente es equivalente a:

La facade de Laravel localiza objetos en el proveedor vendor/Laravel/framework/src/Illuminate/Support/Facades mientras la facade del Cache se coloca en Cache.php:

Cuando usamos cache::get('key') estamos, de hecho, llamando a la clase anterior. Asegúrese de crear el alias de la clase mencionada anteriormente en el archivo de configuración config/app.php:

Los alias son configurados automáticamente por el cargador automático de Laravel. Establecer el nombre de la clase en caché crea coherencia con la facade. Esta opción seguramente hará que las personas que usan las facades se sientan más cómodas con su código.

Los siguientes tres métodos son cruciales para generar una facade:

  • __callStatic() Método mágico PHP, que se define como el método getFacadeAccessor en la clase hijo.
  • La raíz de la facade, que representa la clase subyacente que la Fachada llama métodos.
  • El método resolveFacadeInstance es responsable de resolver la instancia adecuada del servicio.

La implementación de los métodos de clase de la facade:

__callStatic básicamente llama al contenedor de IoC para enlazarse con la clase. También llama a su método (no estático) utilizando el caso switch a través de la función PHP call_user_func_array(), pasando la array de parámetros al método getFacadeRoot() que devuelve el objeto. El método getFacadeRoot() se muestra de la siguiente manera:

Y el resolveFacadeInstance():

Como se presenta en la última línea del artículo, en el método resolveFacadeInstance, Laravel devuelve la instancia del localizador de servicios. Debido a que el localizador es un ejemplo puro de la clase original, concluimos que la facade de Laravel no coincide con la definición del patrón de facade de GoF. Esas son solo ubicaciones de servicio. A diferencia de la facade de Laravel, la Real Facade dificulta las unit tests y algunas veces incluso imposibilita, debido a la creación de dependencias escritas explicitamente.

Para aquellos que creen que DI via constructor es una mejor opción que usar la facade de Laravel, quisiera informarles que se puede incluir alguna configuración adicional.

Cómo crear la facade Laravel

Quiero crear un archivo de chequeo Laravel Facade que es responsable de comprobar si el archivo de entrada es un pdf o no. Para ello, primero debemos crear una clase Is Pdf en App/MyFacade/IsPdf.php:

En segundo lugar, vincule la clase al proveedor de servicios. Se creará el nuevo proveedor de servicios, que se ubicará en App\Providers\IsPdfServiceProvider:

En tercer lugar, crear la clase Facade, como una extensión de la clase mencionada anteriormente Illuminate\Support\Facades\Facade . Se creará la clase que se ubicará en App\Facades\IsPdfFacade.php.

El último paso es registrar la Facade en config/app.php:

Y el alias:

¡Felicitaciones! Has creado con éxito una fachada Laravel. Siéntase libre de probar la Facade usando algunos códigos, tales como:

Conclusión

Ahora sabemos que la facade de Laravel hace que sea super fácil de llamar a los métodos, e inyectar las dependencias reales realmente podría ser util en el tiempo. Por supuesto, Laravel Facade tiene sus propias ventajas y desventajas. Depende del desarrollador para seleccionar la opción correcta.

Para obtener recursos adicionales con Laravel, asegúrese de revisar las ofertas en el marketplace.

¿Quién sabe, quizás este artículo le animará a desarrollar el código agnóstico del marco y olvidarse de usar facades! ¡Buena suerte!

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.