Manejo de rutas en Laravel

Esta entrada la dividiré en dos grandes bloques diferenciados: uno, con la explicación de enrutamiento básico o manejo de rutas en Laravel y un segundo algo más avanzado, para los parámetros que podemos enviar a través de las rutas.

Enrutamiento básico

Las rutas son las direcciones URI que nuestra aplicación entenderá para movernos a través de la página web. Estas rutas se recogen en el archivo routes/web.php. Si tienes una instalación limpia de Laravel y vas a este archivo verás una única ruta:

Route::get('/', function () {
    return view('welcome');
});

Una ruta típica acepta dos argumentos, la URI y un closure o función. La del ejemplo de arriba en concreto dice, si vas a la raíz del proyecto, devuélveme la vista welcome.

Toda ruta es declarada con la clase Route justo antes de :: seguida de un verbo, en este caso GET, para hacer una solicitud de web. Aunque también existe el verbo POST, que sirve para hacer la solicitud y además enviar algunos datos (muy usado en formularios). Pero también tenemos PUT, PATCH, DELETE OPTIONS.

Consideremos el siguiente ejemplo de una estructura de web:

<?php
// routes/web.php

// Este es el home
Route::get('/', function(){});

// Rutas para los libros
Route::get('/libros', function(){});
Route::get('/libros/ficcion', function(){});
Route::get('/libros/ciencia', function(){});
Route::get('/libros/romance', function(){});

// Rutas para las revistas
Route::get('/revistas', function(){});
Route::get('/revistas/celebridades', function(){});
Route::get('/revistas/tecnologia', function(){});

Como se puede ver, ya tenemos creada nuestra estructura de rutas dependiendo de la URI que insertemos en nuestra barra de direcciones. En resumidas cuentas. Los ingredientes van a ser siempre una llamada con el método get() en la clase Route, en cuyo método le pasamos como parámetros:

  •  La URI de la dirección URL a la que apunta.
  • Una función anónima que a su vez:
    • Va a devolver una vista.

Nota: Podemos obviar el carácter «/» del inicio de la ruta. Laravel entenderá igual una ruta «/libros/drama» que otra «libros/drama».

Pasar parámetros a las rutas

Una vez hemos conseguido entender como funcionan las rutas (routes) quizá nos veamos en la necesidad de pasarle algunos valores de relleno en las definiciones de la ruta. Quizá así de primeras no lo entendamos muy bien pero a lo mejor con el siguiente ejemplo quede algo más claro:

Route::get('/libros', function(){
  return view ('pages.libros');
});

Route::get('/libros/{genero}', function($genero){
  return "Lista de libros del género: {$genero}";
});

¿Qué conseguimos con esto?, bueno pues primero que nos ahorraríamos crear diferentes rutas en función de cada categoría de libro o revista que tengamos; segundo, que hemos conseguido enriquecer nuestro código de modo que ya podemos usar las propias rutas para pasar parámetros puntuales.

Si comprobamos la URL http://localhost:8000/libros/fantasia (por poner un ejemplo) se nos devuelve el string con lo que le hayamos escrito.

Podemos cambiar la URI según la categoría que queramos mostrar, pues el resultado será siempre devuelto como la variable genero.

Pero no nos quedamos solo ahí, pues podríamos obviar el requisito de pasarle el parámetro a la función. Para convertir un parámetro en opcional tan solo tenemos que añadir una (?) al final de su nombre.

Route::get('/libros/{genero?}', function($genero = null){
  if($genero == null){
    return view "pages.libros"; //muestra la lista general
  }
  return "Lista de libros del género: {$genero}";
});

También podemos acceder a la información de las rutas con los métodos current, currentRouteName, currentRouteAction:

$route = Route::current();

$name = Route::currentRouteName();

$action = Route::currentRouteAction();

 

Deja un comentario