Middleware de resolución estática de controladores en Laravel 9.x - Amit Merchant - Un blog sobre PHP, JavaScript, etc.

Middleware de resolución estática de controladores en Laravel 9.x - Amit Merchant - Un blog sobre PHP, JavaScript, etc.

En Laravel es posible resolver middleware desde controladores. Por ejemplo, puede resolver el middleware desde el constructor del controlador de esta manera.

public function __construct()
{
    $this->middleware('auth');
}

Como puede ver, podemos resolver un middleware desde el constructor del controlador usando el middleware() método. Lo expliqué en uno de mis artículos anteriores. Puedes consultar este artículo.

Pero el problema con este enfoque es que el middleware se resolverá cada vez que se cree una instancia del controlador. Entonces, si tiene un controlador con 10 métodos, el middleware se resolverá 10 veces. Además, de acuerdo con este problema, dado que el middleware se resuelve cada vez que se crea una instancia del controlador antes de que se apliquen los middlewares, no afecta las dependencias que se pasaron a través del constructor.

Para mitigar este problema, Laravel 9.x introdujo una nueva forma de resolver el middleware de forma estática desde los controladores. Entonces, si está utilizando Laravel 9.x, puede resolver el middleware de forma estática desde los controladores. Veamos cómo funciona con un ejemplo.

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Routing\Controllers\HasMiddleware;
use Illuminate\Routing\Controllers\Middleware;

class UserController extends Controller implements HasMiddleware
{
    public static function middleware()
    {
        return [
            (new Middleware('auth')),
        ];
    }

    public function index()
    {
        //
    }
}

Como puedes ver,

ahora podemos resolver el middleware estáticamente desde los controladores usando el middleware() método. Aquí podemos devolver una matriz de middleware que queremos resolver estáticamente desde el controlador. Para ello, podemos utilizar el Middleware clase (un objeto de valor) que acepta el nombre del middleware (o conjunto de middlewares) como único argumento.

Además, debemos asegurarnos de que el controlador implemente el HasMiddleware interfaz. Esto es necesario para decirle a Laravel que el controlador tiene un middleware que debe resolverse estáticamente.

Ahora, si desea resolver varios middlewares desde el controlador, puede hacerlo así.

public static function middleware()
{
    return [
        (new Middleware('auth')),
        (new Middleware('role:admin')),
    ];
}

También puede resolver middlewares con only y except métodos como este.

public static function middleware()
{
    return [
        (new Middleware('auth'))->only('index'),
        (new Middleware('role:admin'))->except('show'),
    ];
}

¡Y es todo! Así es como puede resolver estáticamente el middleware de los controladores en Laravel 9.x. Esto también resuelve el problema al que se enfrentaba la gente con el enfoque anterior de resolver los middlewares del constructor del controlador.

Si quieres conocer otros artículos parecidos a Middleware de resolución estática de controladores en Laravel 9.x - Amit Merchant - Un blog sobre PHP, JavaScript, etc. puedes visitar la categoría Código.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Subir

Esta página web utiliza cookies para analizar de forma anónima y estadística el uso que haces de la web, mejorar los contenidos y tu experiencia de navegación. Para más información accede a la Política de Cookies . Ver mas