This website uses cookies

Our website, platform and/or any sub domains use cookies to understand how you use our services, and to improve both your experience and our marketing relevance.

Cómo utilizar controladores y middleware en Laravel

Updated on August 26, 2025

10 Min Read

Laravel Middleware proporciona un cómodo mecanismo para evaluar y cribar las demandas HTTP que entran en tu aplicación. Todos estos middleware se encuentran en el registro app/Http/Middleware.

Laravel Middleware actúa como puente entre una solicitud y una reacción. Es un tipo de componente tamizador. Laravel incorpora un middleware que confirma si el cliente de la aplicación está verificado o no. Si el cliente está confirmado, lo desvía a la página de inicio; en caso contrario, lo desvía a la página de inicio de sesión.

Todos los controladores en Laravel se crean en la carpeta Controllers, situada en App/Http/Controllers. Todos los controladores deben tener el espacio de nombres `App\Http\Controllers` y extenderse a partir de la clase Controlador.

Qué son los controladores en Laravel

Los controladores ayudan a mantener la separación de intereses al encapsular la lógica de gestión de solicitudes separada de las rutas y las vistas. Esto mejora la legibilidad, el mantenimiento y la escalabilidad del código. Los controladores en Laravel suelen almacenarse en el directorio app/Http/Controllers y siguen una convención de nomenclatura específica.

Controladores básicos

Los controladores básicos en Laravel son clases que contienen métodos para gestionar diversas solicitudes HTTP. Estos controladores suelen agrupar la lógica de gestión de solicitudes relacionadas. Cada método dentro de un controlador corresponde a una ruta o punto final específico de la aplicación.

Los controladores básicos suelen utilizar métodos como index(), show(), store(), update(), y destroy() para gestionar las operaciones CRUD (Crear, Leer, Actualizar, Eliminar) de los recursos.

Aquí tienes un ejemplo de cómo puedes utilizar controladores básicos para gestionar tus clases y peticiones HTTP.

namespace App\Http\Controllers;

utiliza App\Models\User;
utiliza Illuminate\Http\Request;

class ControladorUsuario extends Controlador
{
  función pública index()
  {
  // Lógica para obtener y mostrar una lista de usuarios
  }
  función pública mostrar($id)
  {
  // Lógica para buscar y mostrar un usuario concreto
  }
  función pública almacenar(Petición $petición)
  {
  // Lógica para almacenar un nuevo usuario
  }
  // Otros métodos como update() y destroy() se definirían aquí
}

Controladores de acción simple

Los controladores de acción única son una alternativa a los controladores tradicionales cuando sólo necesitas una única acción dentro del controlador. En lugar de definir varios métodos, defines un único método __invoke() dentro de la clase del controlador.

namespace App\Http\Controllers;

utiliza Illuminate\Http\Request;

class ControladorDeBienvenida extends Controlador
{
  función pública __invocar()
  {
  devolver vista('bienvenida');
  }
}

¡Experimenta el alojamiento Laravel sin fisuras en Cloudways!

Eleva tu desarrollo Laravel y libera todo el potencial de Laravel con el hosting de Cloudways.

Cómo crear un controlador básico en Laravel

Recuerda el ejemplo de las tablas del artículo sobre encaminamiento.

Ahora crearé un controlador utilizando un único método que imprimirá la tabla requerida en la pantalla. Para definir un controlador en Laravel, primero dale un nombre. En este ejemplo, llamaré al controlador Tabla y luego añadiré Controlador al nombre. El nombre completo de la clase del controlador es ahora TableController. Recuerda que todos los controladores en Laravel deben tener la palabra Controlador al final.

Puedes crear controladores de dos formas:

  • Crear manualmente un archivo
  • Utiliza Artisan para crear el controlador (¡es la opción más fácil!)

A continuación te demostraré cómo puedes crear un controlador utilizando el comando Laravel Artisan. Utilizaré el siguiente comando:

php artisan make:controller TablaController

Una vez completado el comando, se generará una clase vacía `TableController` en la carpeta Controllers con el nombre `TableController.php`. En este punto, la clase tiene el siguiente aspecto

<?php

namespace App\Http\Controllers;
utiliza Illuminate\Http\Request;
clase TableController extends Controlador
{

 
//

}

Ahora añadiré la lógica para generar la tabla. Crea un nuevo método `create` dentro de `TableController`:

función pública crear($número = 2)
{
  for($i =1; $i <= 10 ; $i++){
  echo "$i * $número = ". $i* $número ."
";
  }
}

Esta es la misma lógica que utilicé en la ruta (consulta el artículo sobre rutas de Laravel). Ahora eliminaré esta funcionalidad de la ruta y luego vincularé el controlador a ella

Route::get('/table/{number?}', 'TableController@create')→where('number', '[0-9]+');

Ahora, cada vez que se ejecute la URL, se llamará a la acción de control `crear` y se generará la tabla del número.

Cómo crear un controlador de recursos

Los controladores de recursos se utilizan para crear opciones CRUD para las rutas.

Digamos que tengo un modelo para Libros, y ahora quiero crear un controlador que realice sus métodos CRUD para la ruta en el controlador. Laravel proporciona una manera fácil de hacer esto. Con un solo comando, puedo crear un controlador de recursos y definir un Modelo con él (otra gran característica de Laravel).

Utilizaré el siguiente comando para crear un controlador de recursos:

php artisan make:controller LibroController --resource

Una vez ejecutado el comando, se te pedirá que crees el modelo Libro, ya que no existe en este momento. Escribe por ahora «Sí» y pulsa Intro. Cuando termine, se creará un «BookController« con el modelo vinculado. Tendrás las siguientes acciones en el `ControladorLibro`:

  • index() → Para ver todas las listas de Libros
  • create() → Para cargar una vista para crear un nuevo libro
  • store(Request $request) → Para guardar el libro recién creado
  • show($id) → Para ver un solo libro
  • edit($id) → Para cargar una vista para editarla
  • update(Request $request, $id) → Para actualizar un solo libro
  • destroy($id) → Para borrar un libro

La vinculación de modelos es importante porque reduce las líneas de código y agiliza el diseño general de la aplicación. Tomemos el ejemplo de obtener un libro por su id. Si no utilizara model binding, necesitaría los siguientes pasos para encontrar los detalles del libro a través del id.

Ruta::recurso('libro', 'BookController');

Esta única declaración creará varias rutas para gestionar las peticiones de BooksController. La ruta de recursos gestionará las siguientes acciones:

Deja de perder el tiempo con los servidores

Cloudways se encarga de la gestión del servidor por ti para que puedas centrarte en crear grandes aplicaciones y mantener contentos a tus clientes.

VerboURIAcciónNombre de la ruta

GET /libros índice libros.indice
GET /libros/crear crear libros.crear
POST /libros tienda tienda.libros
GET /libros/{book} mostrar libros.show
GET /libros/{book}/editar editar libros.editar
PUT/PATCH /libros/{book} actualizar libros.actualizar
BORRAR /libros/{book} destruir libros.destruir

También puedes especificar una ruta de recursos para que sólo gestione determinadas acciones o puedes excluir las acciones que no quieres que gestione una ruta. He aquí la sintaxis de los fragmentos de código para ambas situaciones:.

Route::resource('book', 'BookController', ['only' => [

  'índice', 'mostrar'

]]);

Route::resource('book', 'BookController', ['except' => [

  'crear', 'almacenar', 'actualizar', 'destruir'

]]);

Una vez que guardes el archivo, sólo se gestionarán las rutas siguientes:

Enlace controlador-modelo en Laravel

Con Laravel, ahora puedes vincular un modelo o modelos a tu controlador de recursos añadiendo `–model=nombredemodelo` al comando Artisan.

php artisan make:controller BookController --resource --model=Libro

Cuando ejecutes este comando, las siguientes funciones se vincularán a los controladores.

  • show(Book $book) → ver un solo libro
  • edit(Book $book) → cargar una vista para editarla
  • update(Request $request, Book $book) → actualizar un solo libro
  • destroy(Book $book) → borrar un libro

La vinculación de modelos es importante porque reduce las líneas de código y agiliza el diseño general de la aplicación. Tomemos el ejemplo de obtener un libro por su id. Si no utilizara model binding, necesitaría los siguientes pasos para encontrar los detalles del libro a través del id.

función pública mostrar($id)
{
  $libro = Libro::where('id', $id)->get();
  return view('libro.libro',['libro' => $libro]);
}

Ahora, con el model binding, sólo tengo que devolver la vista de ese Libro y todo lo demás, es decir, encontrar el libro por el id y la generación de errores lo hará el propio Laravel.

función pública mostrar(Libro $libro)
{
  return view('libro.libro',['libro' => $libro]);
}

Como has podido ver en este ejemplo, he conseguido reducir una línea de código. En proyectos de mayor envergadura, esta ventaja sería más evidente!.

Esto es todo para los controladores. Puedes aprender más sobre el enrutamiento de recursos en Laravel en la documentación oficial. Ahora hablaré de los Middlewares en Laravel.

Qué son los Middleware en Laravel

El middleware en Laravel es una potente característica que permite a los desarrolladores ejecutar una serie de tareas antes de que la solicitud llegue a la lógica central de tu aplicación o después de que se genere la respuesta.

El middleware puede gestionar una serie de funciones como la autenticación, el registro, la compartición de recursos entre orígenes (CORS) e incluso la modificación de solicitudes. Esencialmente, el middleware proporciona una forma sencilla de comprobar o modificar las peticiones HTTP que entran en tu aplicación, sin tener que abarrotar tus controladores o rutas con esa lógica.

El middleware suele registrarse y asignarse a rutas o grupos de rutas. Puedes crear tu propio middleware personalizado para adaptarlo a las necesidades específicas de tu aplicación. Esto se hace generando una nueva clase de middleware mediante el comando artisan de Laravel. La clase middleware contiene un método handle en el que defines la lógica que se ejecutará antes o después de procesar la solicitud.

Cómo funcionan los middlewares en Laravel

Cuando se realiza una solicitud a la aplicación, pasa a través de cualquier middleware asignado a la ruta antes de llegar al controlador. Si se permite que la solicitud continúe, se pasa a la lógica de la aplicación; si no, el middleware puede interrumpir la solicitud, redirigiendo al usuario o devolviendo una respuesta, como un mensaje de error o acceso denegado. Laravel incluye varios middleware integrados, como auth para comprobar la autenticación del usuario y throttle para limitar la velocidad de las peticiones.

Por ejemplo, puedes crear middleware para registrar datos de solicitud, validar tokens de API o comprobar roles de usuario. Una vez creado, el middleware se registra en el núcleo HTTP, y puedes adjuntarlo a cualquier ruta o controlador.

¿Cómo crear middleware en Laravel?

Los middleware son la forma más sencilla de verificar las peticiones HTTP antes de pasarlas al controlador. Todos los middleware en Laravel se crean en la carpeta Middleware, situada dentro de la carpeta `app/HTTP`.

Creación de un Middleware Básico en Laravel

El proceso de creación de un middleware es muy similar tanto en Laravel 8 como en cualquier versión superior de Laravel.

Ahora crearé un middleware para nuestro controlador Libros en el que no se almacenarán en la base de datos los libros que correspondan a un año determinado. Llamaré a este middleware CheckYear y utilizaré el siguiente comando de Artisan:

php artisan make:middleware ComprobarAño

Una vez finalizado el comando se creará un middleware con una función handle (a la que añadiré la lógica).

<?php

namespace App\Http\Middleware;

Utiliza el cierre;

clase ComprobarAño

{

 
/**

  * Gestionar una solicitud entrante.

  *

  * @param \Illuminate\Http\Request $request

  * @param \Cierre $siguiente

  * @devolución mixta

  */

  función pública handle($petición, Cierre $siguiente)

  {

  $año = ['1956','1970','1972'];

  if (array_has($año,$solicitud->año) {

  return redirect('home');

  }

  devuelve $siguiente($petición);

  }

}

En el código anterior, definí el array $año, en el que añadí los años que no quiero añadir a la base de datos. A continuación, utilicé la función de ayuda de Laravel array_has para comprobar la entrada del año solicitado. Si el año existe en el array, será redirigido a la home. En caso contrario, se completará la solicitud.

Ahora que tengo un middleware, voy a definir un controlador. La forma más sencilla de definir el middleware es en el constructor del controlador. Recuerda definir también el espacio de nombres del middleware en el controlador. Mira el siguiente código para definir el middleware en el constructor:

<?php

namespace App\Http\Controllers;

utiliza App\Book;

utiliza Illuminate\Http\Request;

utiliza App\Http\Middleware\CheckYear;

class ControladorDeLibros extends Controlador

{

 
/**

  * Constructor.

  *

  * @return void

  */

  función pública __construct()

  {

  $this->middleware(ComprobarAño::clase);

  }

Puedes definir el middleware en el archivo `app/Http/Kernel.php`, en el array `$routemiddleware` y asignarle una clave. Echa un vistazo al siguiente código:

protected $routeMiddleware = [

  auth' => \Illuminate\Auth\Middleware\Authenticate::class,

  auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,

  'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,

  'can' => \Illuminate\Auth\Middleware\Authorize::class,

  'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,

  throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,

  'año' => \AppApp\Http\Middleware\CheckYear::class

  ];

De esta forma, no necesito definir la clase middleware en el controlador. Me bastaría con llamarla por su nombre (ver el código siguiente):

<?php

namespace App\Http\Controllers;

utiliza App\Book;

utiliza Illuminate\Http\Request;

class ControladorDeLibros extends Controlador

{

 
/**

  * Constructor.

  *

  * @return void

  */

  función pública __construct()

  {

  $this->middleware('año');

  }

Además, también puedes definir el middleware directamente a las rutas.¡Sólo tienes que añadir la ruta directamente!

Route::post('/libros','ControladorLibros@tienda')->middleware('año');

Ruta::put('/libros/{book}','BooksController@update')->middleware('año');

Crear un Middleware para el Controlador sin una Clase Separada

En un controlador, puedes definir un middleware sin escribir una clase independiente para él. El código para el middleware y el constructor es:

<?php

namespace App\Http\Controllers;

utiliza App\Book;

utiliza Illuminate\Http\Request;

class ControladorDeLibros extends Controlador

{

 
/**

  * Constructor.

  *

  * @return void

  */

  función pública __construct()

  {

  $this->middleware(function($petición,$siguiente)

  {

  $año = ['1956','1970','1972'];

  if (array_has($año,$solicitud->año) {

  return redirect('home');

  }

  devuelve $siguiente($petición);

  });

  }

 

Esto funcionará como si hubieras creado una clase independiente para el middleware. Consulta la documentación oficial para obtener más información sobre los middlewares. Ahora será como si hubieras creado una clase independiente para él. Puedes aprender más sobre middleware en Laravel en la documentación oficial.

Potencia tus proyectos Laravel con Cloudways Hosting – ¡Rápido, Seguro y Escalable!

¡Potencia tus proyectos Laravel con Cloudways Hosting! ¡Despliégalo ahora para obtener un rendimiento ultrarrápido y una fiabilidad insuperable!

Conclusión

En este tutorial, he ofrecido una visión general de los controladores y el middleware en Laravel, he explicado cómo crear controladores simples y de recursos, y cómo definir sus rutas. También cubrí cómo crear middleware simple y cómo vincularlos a controladores y rutas. Si quieres alojar tu proyecto Laravel, considera la posibilidad de utilizar Cloudways para disfrutar de una experiencia sin problemas. Si deseas añadir alguna sugerencia o tienes alguna pregunta, ¡deja un comentario a continuación!

P: ¿Qué es el middleware en el controlador Laravel?

R: El middleware en los controladores de Laravel actúa como un filtro para las peticiones HTTP, permitiéndote interceptar y modificar las peticiones entrantes antes de que lleguen a la acción del controlador.

P: ¿Podemos utilizar middleware en el controlador?

Sí, se puede utilizar middleware en los controladores de Laravel. Adjuntando middleware a rutas específicas del controlador o a acciones del controlador.

P: ¿Cuál es la diferencia entre controlador y middleware?

A: Controladores en Laravel gestionan las peticiones HTTP de la aplicación, conteniendo la lógica para procesar y responder a las peticiones entrantes.
Considerando, middleware actúa como un filtro para estas peticiones, interceptándolas antes de que lleguen al controlador, permitiendo tareas como la autenticación, la validación y la modificación de peticiones.

Q. ¿Qué es un controlador Laravel y para qué sirven los controladores en Laravel?

R: En un proyecto Laravel, las clases controladoras están asociadas a un recurso (URI). Manejan toda la lógica relacionada con un URI concreto (como un blog). Los controladores Laravel separan la lógica del resto del código, por lo que puedes cambiar el código de forma segura sin alterar las vistas.

P: ¿Cómo añado un controlador en Laravel?

R: En Laravel, puedes añadir un Controlador utilizando el comando Artisan:

php artisan make:controlador

Esto creará el controlador en el directorio app/Http/Controllers.

Q. ¿Qué es un ejemplo de middleware?

R: Un ejemplo de middleware en Laravel es el middleware auth. Este middleware comprueba si un usuario está autenticado antes de concederle acceso a determinadas rutas. Si el usuario no está autenticado, lo redirige a la página de inicio de sesión. Por ejemplo, podrías utilizarlo así en una definición de ruta:

Route::get('/tablero', function () {
  devolver vista('tablero');
})->middleware('auth');

En este caso, el middleware de autenticación garantiza que sólo los usuarios registrados puedan acceder a la ruta /dashboard. Si el usuario no ha iniciado sesión, será redirigido a la página de inicio de sesión.

Q. ¿Cuál es el papel del middleware en Laravel?

R: El middleware en Laravel sirve como mecanismo de filtrado que se sitúa entre la petición HTTP y la lógica de la aplicación. El papel del middleware incluye el manejo de funciones como la autenticación, el registro, la validación de peticiones, la modificación de peticiones HTTP y la gestión de la limitación de velocidad.

Share your opinion in the comment section. COMMENT NOW

Share This Article

Shahzeb Ahmed

Un creativo de día (con una taza de té) y un creativo de noche. Ahmad Kamran es redactor de contenidos estacionales y Ejecutivo de Marketing Senior en Cloudways. Puedes encontrarle en su escritorio escribiendo, elaborando estrategias o jugando. Y en caso de que no puedas encontrarle aquí, estará en la montaña o junto a la orilla del río.

×

Webinar: How to Get 100% Scores on Core Web Vitals

Join Joe Williams & Aleksandar Savkovic on 29th of March, 2021.

Do you like what you read?

Get the Latest Updates

Share Your Feedback

Please insert Content

Thank you for your feedback!

Do you like what you read?

Get the Latest Updates

Share Your Feedback

Please insert Content

Thank you for your feedback!

¿Quieres experimentar la plataforma Cloudways en todo su esplendor?

Realice una visita guiada GRATUITA de Cloudways y compruebe usted mismo lo fácil que es administrar su servidor y sus aplicaciones en la plataforma de alojamiento en la nube líder.

Iniciar mi recorrido