Inicio » Blog »

28 marzo, 2025

Middlewares en Laravel en una Ruta Resource y Controlador

#Laravel #PHP

middlewares en Laravel para proteger tus rutas y métodos específicos de manera eficiente. En este tutorial, aprenderás a implementar middlewares en rutas resource.

Middlewares en Laravel en una Ruta Resource y Controlador

Suscríbete a nuestro canal en Youtube

Suscríbirse

Middlewares en Laravel para proteger tus rutas y métodos específicos de manera eficiente. En este tutorial, aprenderás a implementar middlewares en rutas resource, controladores y métodos específicos utilizando only, except y políticas de autorización. Además, te mostramos alternativas como servicios personalizados y gates para manejar lógica condicional dentro de tu aplicación. ¡Domina la seguridad en Laravel y lleva tus proyectos al siguiente nivel con ejemplos prácticos y código descargable!

Para abordar tu pregunta, hay varias formas de manejar el uso de middleware en rutas de tipo resource o en controladores específicos. A continuación, te explico las opciones disponibles y cómo implementarlas:


Excluir middleware para ciertos métodos en una ruta de tipo resource

Si tienes una ruta definida como Route::resource() y deseas aplicar un middleware solo a algunos métodos específicos (o excluirlo de ciertos métodos), puedes usar la sintaxis de only o except al momento de definir el middleware en la ruta.

Ejemplo:

php

Route::resource('posts', PostController::class)
->middleware(['auth', 'admin']) // Middleware general para todos los métodos
->only(['index', 'show']); // Aplica el middleware solo a estos métodos

Route::resource('posts', PostController::class)
->middleware(['auth']) // Middleware general
->except(['create', 'store']); // Excluye estos métodos del middleware

En este caso:

  • only aplica el middleware solo a los métodos especificados.
  • except excluye los métodos especificados del middleware.

Aplicar middleware directamente en el controlador

Otra opción es aplicar el middleware dentro del controlador. Esto es útil cuando deseas que el middleware se aplique a todos los métodos del controlador o a métodos específicos.

Aplicar middleware a todo el controlador:

Dentro del constructor del controlador, usa el método middleware():

php

class PostController extends Controller
{
public function __construct()
{
$this->middleware('auth'); // Aplica el middleware 'auth' a todos los métodos
}

public function index()
{
// Lógica para listar posts
}

public function show($id)
{
// Lógica para mostrar un post específico
}
}

Aplicar middleware a métodos específicos:

Puedes usar el método only o except para limitar el middleware a ciertos métodos:

php

class PostController extends Controller
{
public function __construct()
{
$this->middleware('auth')->only(['create', 'store']); // Solo para 'create' y 'store'
$this->middleware('admin')->except(['index', 'show']); // Excluye 'index' y 'show'
}
}

Dejar la ruta normal sin middleware y aplicarlo solo en el controlador

Si prefieres mantener la definición de la ruta limpia (sin middleware) y delegar la lógica del middleware al controlador, simplemente no agregues middleware en la definición de la ruta y configura todo dentro del controlador, como se mostró en el punto anterior.

Ejemplo:

Ruta:

php

Route::resource('posts', PostController::class);

Controlador:

php

class PostController extends Controller
{
public function __construct()
{
$this->middleware('auth')->only(['edit', 'update', 'destroy']);
}
}

Esto permite que las rutas sean más simples y que la lógica del middleware esté encapsulada en el controlador.


Combinar ambas aproximaciones

También puedes combinar ambas estrategias: aplicar middleware en la ruta para casos generales y ajustar detalles específicos en el controlador.

Ejemplo:

Ruta:

php

Route::resource('posts', PostController::class)->middleware('auth');

Controlador:

php

class PostController extends Controller
{
public function __construct()
{
$this->middleware('admin')->only(['destroy']); // Solo el administrador puede eliminar
}
}


 

La elección entre aplicar middleware en la ruta o en el controlador depende de tus necesidades y de la claridad que desees en tu código. Aquí te dejo un resumen:

  • Usa middleware en la ruta si quieres mantener la lógica de acceso centralizada en el archivo de rutas.
  • Usa middleware en el controlador si prefieres encapsular la lógica de acceso dentro del propio controlador.
  • Combina ambas aproximaciones si necesitas reglas generales y específicas.

Si tienes dudas adicionales o necesitas un ejemplo más detallado, no dudes en preguntar. ¡Estoy aquí para ayudarte!


Leido 737 veces | 0 usuarios

Código fuente no disponible.

Compartir link del tutorial con tus amigos


Curso de Laravel básico

USD 0.00

Descarga del código fuente

Curso de Laravel básico

Codea Applications

México, Colombia, España, Venezuela, Argentina, Bolivia, Perú