Los facades en Laravel proporcionan una interfaz “Estática” a las clases que están disponibles a través del contenedor de servicios de la aplicación, de esta manera podemos llamar a métodos sin tener que preocuparnos por instanciar la clase, pasar dependencias, etc. El único «problema» hasta la versión 5.3 de Laravel, era tener que crear nosotros mismos una clase para representar el facade y pasarle la referencia al contenedor de inyección de dependencias, sin embargo a partir de Laravel 5.4 este proceso es automático con los nuevas facades en tiempo real o facades automáticos. En esta lección aprenderás cómo usarlos pero también verás un repaso sobre la creación de facades manuales y cómo registrar clases en el contenedor del framework.

Suscríbete a nuestro boletín

Te enviaremos publicaciones con consejos útiles y múltiples recursos para que sigas aprendiendo.

Notas

En Laravel 5.3 y versiones anteriores crear un facade de una clase implicaba:

  • Tener una clase con la que queremos trabajar para crear un componente.
  • Usar un service provider para registrar dicha clase al contenedor de servicios de la aplicación.
  • Crear un facade que se asocie a la llave
  • Registrar su alias en config/app.php (opcional)

Puedes también consultar el tutorial Facades personalizados en Laravel 5.1

Sin embargo, a partir de Laravel 5.4 solo necesitamos tener la clase como por ejemplo:

namespace App;

class Alert 
{
    public function message($message, $type)
    {
        return session()->flash('alert', compact('message', 'type'));
    }

    public function render()
    {
        return view()->make('component/alert', session('alert'));
    }
}

y luego en cualquier controlador o ruta llamar a la clase darle el prefijo Facades\ al namespace de la clase, por ejemplo Facades\App\Alert:

use Facades\App\Alert;

Route::get('dashboard', function() {
    Alert::message('¡Bienvenido de nuevo!', 'success');
    
    return view('dashboard');
});

Laravel entonces va a generar una clase facade automáticamente en el directorio /storage/framework/cache y la va a usar y a reusar cada vez que haga falta.

Si la clase que creas tiene dependencias, Laravel también se encargará de instanciarlas e inyectarlas por ti. De esta manera podrás dedicar más tiempo a diseñar clases con la lógica de negocio de tu app y menos tiempo pensando en cómo instanciarlas / usarlas.

Material relacionado

Únete a nuestra comunidad en Discord y comparte con los usuarios y autores de Styde, 100% gratis.

Únete hoy

Regístrate hoy en Styde y obtén acceso a todo nuestro contenido.

Lección anterior Componentes y slots en Laravel 5.4 Lección siguiente Generar controladores asociados a un modelo en Laravel 5.4