15

Qué es y cómo funciona un middleware en Laravel

47583Puntos

hace 4 años

Qué es un middleware en Laravel

Un middleware es un software que proporciona un enlace entre aplicaciones, sistemas o proyectos independientes. En otras palabras es un elemento que usamos como la vía para conectar dos aplicaciones o dos partes, su función es pasar datos entre ellas o de un lado a otro.

De hecho su significado es “medio” y lo fabricamos e implementamos en cualquier área, un middleware puede ser un hardware, este termino se usa desde hace varias décadas en informática.

Cómo funciona un middleware

Si hablamos de Laravel podemos decir que un middleware es un archivo que filtra las peticiones HTTP en un sistema, es un archivo adicional que va en el medio de la petición y de eso que se quiere ver como resultado final (un controlador, vista, archivo PDF o cualquier cosa). En otras palabras es una capa adicional donde podemos colocar la lógica de acceso.

En términos sencillos tenemos lo siguiente: Un middleware altera el flujo, este puede devolver la respuesta deseada o una redirección a una página de error, mensaje o estado HTTP.

namespaceApp\Http\Middleware;

useClosure;

classEjemploMiddleware{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */publicfunctionhandle($request, Closure $next){
        return $next($request);
    }
}

En temas prácticos podemos ver que un middleware se define en una clase y por cada restricción o regla vamos a tener una clase (un middleware).

Para crear esta clase debemos ejecutar el comando php artisan make:middleware EjemploMiddleware y dicha clase se creará en la ruta App\Http\Middleware\EjemploMiddleware.php.

Método handle().

  1. Esta recibe como parámetro la clase de peticiones @param \Illuminate\Http\Request $request que se usa en los controladores, es la clase que que recibe los formularios y datos en general.
  2. El segundo parámetro es $next, un Closure que cumple con la función de ejecutar el siguiente middleware si la aplicación pasa correctamente este paso o middleware actual (si todo va bien entonces NEXT).

Los middleware se ejecutan en cadena, si la petición no pasa o no se cumple algún middleware no llegamos al NEXT y se rompe la cadena. ¿Cuándo se rompe la cadena de middleware? Cuando no llegamos a la línea return $next($request); o si llegamos al fin de la cadena de middleware.

Ejemplo

Podemos comenzar entendiendo que tenemos una tabla de usuarios con un campo clave llamado subscribed y es un boolean. Aquí podemos ver que por defecto los usuarios no estarán suscritos pero es algo que podemos activar colocando un true o el valor 1.

//...classCreateUsersTableextendsMigration{
    //...publicfunctionup(){
        Schema::create('users', function(Blueprint $table){
          	//...

            $table->boolean('subscribed')->default(false);
        });
    }

    //...
}

Middleware Personalizado

Para este ejemplo necesitamos una clase específica, recuerda: Cada regla requiere de una clase (un middleware).

 $ php artisan make:middleware Subscribed

Aquí podemos ver que creamos una clase para colocar directamente la lógica de acceso para los usuarios suscritos. Este se crea en app/Http/Subscribed.php.

namespaceApp\Http\Middleware;

useClosure;

classSubscribed{
    publicfunctionhandle($request, Closure $next){
        if ($request->user()->subscribed) {
            return $next($request);
        }

				return abort(403);
    }
}

Estado 403: La solicitud fue legal y correcta pero el servidor no la responderá porque el cliente no tiene permisos o privilegios.

Registro el middleware

namespaceApp\Http;

useIlluminate\Foundation\Http\KernelasHttpKernel;

classKernelextendsHttpKernel{
    //...protected $routeMiddleware = [
        'auth' => \App\Http\Middleware\Authenticate::class,
        'subscribed' => \App\Http\Middleware\Subscribed::class,
    ];

    //...
}

Uso del middleware

Route::get('/courses', 'CourseController@index')->middleware('auth', 'subscribed');

Un middleware es una forma acertada de proteger a nuestras rutas, lo importante es definir qué queremos proteger y crear la lógica necesaria en un archivo o clase aparte (en un middleware). Puedes crear un if y pegarlo donde necesites pero usamos a un middleware para aislar ese if y usarlos las veces que sea necesaria sin duplicar el código.

En este caso nuestra lógica es: Si estás suscrito entonces NEXT, sino entonces error 403.

Continúa tu aprendizaje en Laravel y ponlo en práctica

Recuerda que en Platzi cuentas con toda una ruta de Desarrollo Web Backend con PHP en donde seré tu profesor para que inicies con este emocionante lenguaje y desarrolles proyectos profesionales utilizando tecnologías como Laravel.

¡Nunca pares de aprender!

Italo
Italo
italofantone

47583Puntos

hace 4 años

Todas sus entradas
Escribe tu comentario
+ 2
Ordenar por:
2
2433Puntos
4 años
Información muy bien detallada y fresca para mí 😎
1
15268Puntos
3 años

siempre tiene que pasar por el middleware Auth?

1
2 años

no encontré nada del middleware en tu curso, tienes otro en donde lo expliques a fondo?