Buscar..


Introducción

Los middleware son clases, que pueden asignarse a una o más rutas, y se utilizan para realizar acciones en las fases iniciales o finales del ciclo de solicitud. Podemos considerarlos como una serie de capas por las que debe pasar una solicitud HTTP mientras se ejecuta.

Observaciones

Un middleware "Antes" se ejecutará antes del código de acción del controlador; mientras que un middleware "Después" se ejecuta después de que la solicitud maneje la solicitud

Definiendo un middleware

Para definir un nuevo middleware tenemos que crear la clase de middleware:

class AuthenticationMiddleware
{
    //this method will execute when the middleware will be triggered
    public function handle ( $request, Closure $next )
    {
        if ( ! Auth::user() )
        {
            return redirect('login');
        }

        return $next($request);
    }
}

Luego tenemos que registrar el middleware: si el middleware se debe vincular a todas las rutas de la aplicación, debemos agregarlo a la propiedad de middleware de app/Http/Kernel.php :

protected $middleware = [
        \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
        \App\Http\Middleware\AuthenticationMiddleware::class
];

mientras que si solo queremos asociar el middleware a algunas de las rutas, podemos agregarlo a $routeMiddleware

//register the middleware as a 'route middleware' giving it the name of 'custom_auth'
protected $routeMiddleware = [
    'custom_auth' => \App\Http\Middleware\AuthenticationMiddleware::class
];

y luego enlazarlo a las rutas individuales como esta:

//bind the middleware to the admin_page route, so that it will be executed for that route
Route::get('admin_page', 'AdminController@index')->middleware('custom_auth');

Antes vs Después de Middleware

Un ejemplo de middleware "antes" sería el siguiente:

<?php

namespace App\Http\Middleware;

use Closure;

class BeforeMiddleware
{
    public function handle($request, Closure $next)
    {
        // Perform action

        return $next($request);
    }
}

mientras que "después" del middleware se vería así:

<?php

namespace App\Http\Middleware;

use Closure;

class AfterMiddleware
{
    public function handle($request, Closure $next)
    {
        $response = $next($request);

        // Perform action

        return $response;
    }
}

La diferencia clave está en cómo se maneja el parámetro $request . Si las acciones se realizan antes de que $next($request) ocurra antes de que se ejecute el código del controlador mientras se llama $next($request) , las acciones se realizarán después de que se ejecute el código del controlador.

Ruta middleware

Cualquier middleware registrado como routeMiddleware en app/Http/Kernel.php puede asignarse a una ruta.

Hay algunas formas diferentes de asignar middleware, pero todas hacen lo mismo.

Route::get('/admin', 'AdminController@index')->middleware('auth', 'admin');
Route::get('admin/profile', ['using' => 'AdminController@index', 'middleware' => 'auth']);
Route::get('admin/profile', ['using' => 'AdminController@index', 'middleware' => ['auth', 'admin']);

En todos los ejemplos anteriores, también puede pasar nombres de clase totalmente calificados como middleware, independientemente de si se ha registrado como middleware de ruta.

use App\Http\Middleware\CheckAdmin;
Route::get('/admin', 'AdminController@index')->middleware(CheckAdmin::class);


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow