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 tradicionalmiddleware() o el middleware can, basta con añadir los atributos directamente a la clase o al método para completar la configuración.
#[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.
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.
#[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
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.