Contenido del curso

Manos a la obra con nuestro proyecto

Controladores en Laravel con Artisan

Resumen

Trabajar toda la lógica de tu aplicación en un solo archivo funciona, pero no escala. Por eso, en Laravel, los controladores te permiten separar la lógica de las rutas y mantener tu código ordenado, fácil de mantener y preparado para crecer.

¿Qué es un controlador en Laravel y dónde vive?

Un controlador es el archivo que se encarga de manejar las peticiones que llegan desde las rutas y devolver una respuesta, normalmente una vista. En Laravel, los controladores viven en la carpeta App/HTTP/Controllers.

La idea es simple: la ruta invoca a un controlador, el controlador procesa la solicitud y entrega una respuesta. Así cada cosa queda en su lugar.

¿Para qué sirve un controlador en Laravel? Para aislar la lógica que antes vivía dentro de las rutas. La ruta solo apunta al controlador y este se encarga de responder.

¿Cómo generar un controlador con Artisan?

Puedes crear el archivo a mano con clic derecho, pero Laravel incluye una herramienta que genera el código base por ti: Artisan. Desde la terminal, parado en la carpeta del proyecto, escribes [01:00]:

bash php artisan make:controller PageController

Ese comando crea el archivo PageController.php dentro de App/HTTP/Controllers con la estructura base lista para que agregues tus métodos.

¿Qué métodos debo definir dentro del controlador?

En el ejemplo, el PageController administra tres páginas, así que necesitas tres métodos públicos:

  • home, que retorna la vista de inicio.
  • blog, que retorna la vista del blog.
  • post, que recibe un parámetro y retorna la vista de una publicación.

Cada método contiene la lógica que antes vivía dentro de la función anónima de la ruta. Cortas y pegas esa lógica dentro del método correspondiente.

¿Cómo conectar las rutas con el controlador?

Una vez creado el controlador, necesitas importarlo en el archivo de rutas. Arriba del archivo escribes la sentencia use con la ruta completa al controlador [02:10]:

php use App\Http\Controllers\PageController;

Ese App con A mayúscula funciona como alias de la carpeta App, gracias a la configuración del archivo composer.json. Por eso la ruta completa apunta a App/Http/Controllers/PageController.

Después reemplazas la función anónima de cada ruta por un arreglo que apunta al controlador y al método:

php Route::get('/', [PageController::class, 'home']); Route::get('/blog', [PageController::class, 'blog']); Route::get('/blog/{post}', [PageController::class, 'post']);

¿Qué significa PageController::class? Es una forma de referirte a la clase del controlador sin escribir su ruta como string. Laravel resuelve internamente a qué archivo apuntas.

¿Cómo agrupar rutas que usan el mismo controlador?

Repetir PageController::class en cada línea funciona, pero existe una forma más limpia: agrupar las rutas que comparten controlador con el método controller. Así te ahorras escribir el nombre de la clase en cada ruta [03:30]:

php Route::controller(PageController::class)->group(function () { Route::get('/', 'home'); Route::get('/blog', 'blog'); Route::get('/blog/{post}', 'post'); });

Dentro del grupo, cada ruta solo necesita la URL y el nombre del método. El controlador ya está declarado arriba, en el Route::controller.

¿Cuándo conviene usar grupos de rutas?

Los grupos son útiles cuando varias rutas comparten el mismo controlador, el mismo middleware o el mismo prefijo. En este caso, las tres páginas (home, blog y post) viven dentro del PageController, así que tiene sentido agruparlas.

  • Reduces código repetido.
  • Mejoras la lectura del archivo de rutas.
  • Facilitas mantener cambios en un solo lugar.

Ambas técnicas funcionan igual en el navegador. Si entras a /, /blog o /blog/{post}, el sistema responde con la vista correspondiente porque la ruta invoca al método correcto del controlador.

¿Por qué separar rutas y controladores mejora tu proyecto?

Laravel te empuja a colocar cada cosa en su lugar. Las rutas declaran qué URL responde, los controladores manejan la lógica y las vistas muestran el resultado. Esa separación se nota cuando tu proyecto crece y necesitas ajustar una página sin tocar el resto.

Cuando termines de migrar tus rutas a PageController y probar tanto la versión clásica como la versión con Route::controller, comenta cuál te resulta más cómoda y por qué.

      Controladores en Laravel con Artisan