Skip to main content

Descripción general

En Laravel 13, la asignación de middleware y las comprobaciones de autorización en los controladores pueden declararse mediante atributos PHP. En lugar de utilizar el método tradicional middleware() o el middleware can, basta con añadir los atributos directamente a la clase o al método para completar la configuración.
Todos los atributos de controlador se encuentran en el espacio de nombres Illuminate\Routing\Attributes\Controllers.

#[Middleware] — asignar middleware

Aplicación a la clase

Si añades #[Middleware] a nivel de clase, el middleware se aplicará a todas las acciones de ese controlador.
Para aplicar varios middleware, repite el atributo.

Aplicación al método

El middleware añadido a nivel de método se combina con el middleware definido a nivel de clase.

Filtrado con only / except

Si añades only o except al atributo a nivel de clase, puedes limitar los métodos a los que se aplica.

Middleware de tipo closure

También puedes pasar un closure al atributo. Resulta útil cuando quieres escribir el proceso en línea.

Comparación con el método tradicional middleware()

Si utilizas atributos no necesitas implementar la interfaz HasMiddleware. Sin embargo, mezclar el método middleware() con los atributos puede provocar comportamientos inesperados, por lo que se recomienda utilizar solo uno de los dos enfoques.

#[WithoutMiddleware] — excluir middleware

Excluye el middleware aplicado a nivel de clase de un método concreto o de toda la clase.

Aplicación al método

Aplicación a la clase con only / except

Si añades #[WithoutMiddleware] a nivel de clase, el middleware se excluirá de todas las acciones, incluyendo las de las clases hijas. Con only / except puedes limitar el alcance de la exclusión.
#[WithoutMiddleware] solo es válido para el middleware de ruta. No puede excluir el middleware global registrado en app/Http/Kernel.php.

#[Authorize] — autorización mediante policies

Como azúcar sintáctico del middleware can, permite declarar las comprobaciones de autorización basadas en policies mediante un atributo.

Uso básico

Argumentos de la policy

Como segundo argumento puedes pasar los siguientes valores.

Comparación con el middleware can

Ya no necesitas declarar el middleware en el archivo de rutas y la lógica de autorización queda concentrada en el controlador.

Ejemplos prácticos

Aplicación a un controlador de recursos

Aplicación a un controlador de API

Orden de procesamiento de los atributos

Cuando hay varios atributos aplicados, el orden de procesamiento es el siguiente.
#[Authorize] funciona internamente como el middleware can, por lo que se procesa en el mismo pipeline que #[Middleware].

Resumen: ¿cuál deberías usar?

Próximos pasos

Atributos PHP (colas y Eloquent)

Explicación de los atributos PHP que puedes usar en jobs de cola y modelos Eloquent.

Nivel intermedio: controladores

Aprende el uso básico de los controladores de Laravel.
Última modificación el 2 de agosto de 2026