El sistema de Rutas de Laravel es bastante intuitivo y fácil de manejar, pero a la vez muy potente, con éste podemos crear todo tipo de rutas en la aplicación: sencillas o complejas. En esta lección aprenderás cómo crear tus primeras rutas en un proyecto de Laravel.

Repositorio

Ver el código de esta lección en GitHub

Suscríbete a nuestro boletín

Te enviaremos publicaciones con consejos útiles y múltiples recursos para que sigas aprendiendo.

Notas

Por Clemir Rondón.

Las rutas son una capa muy importante en Laravel, es por ello que el Framework destina un directorio en la carpeta raíz, llamado routes, para ubicar todas las rutas de la aplicación.  Por defecto, tiene 2 archivos de rutas web.php y api.php. Como sus nombres lo expresan en web.php se definen las rutas para la web y en api.php las rutas para crear APIs para la aplicación.

Podemos definir rutas de varias maneras en esta lección lo hicimos usando una función anónima, que sigue el siguiente formato:

Route::get('/esta-es-la-url', function () {
    return 'Hola mundo';
});

Se escribe la clase Route que llama al método relacionado con el verbo HTTP, en este caso, get que acepta dos parámetros: el primero es la URL que se llamará desde el navegador y el segundo es una función anónima que devuelve lo que queremos mostrar.

Más adelante conocerás otras formas de definir rutas, como por ejemplo, usando acciones de controladores.

Para ver la ruta en funcionamiento debemos escribir en el navegador algo como: http://tu-proyecto.dev/esta-es-la-url, esto dependiendo de VirtualHost que hayas creado para tu proyecto. Si no lo tienes puedes usar php artisan serve o revisar la primera lección de este curso donde te explicamos cómo preparar tu entorno de desarrollo.

Rutas con parámetros

También con el sistema de rutas de Laravel puedes crear rutas más complejas que necesiten de parámetros dinámicos.  Se pueden definir de la siguiente forma:

Route::get('/usuarios/detalles/{id}', function ($id) {
    return "Detalles del usuario: {$id}";
});

En este caso Laravel se encarga de capturar el segmento de la ruta que es dinámico (lo identifica porque está encerrado entre llaves). Por tanto, en la URL pasamos la identificación del parámetro encerrado entre llaves y en la función anónima lo pasamos como argumento para que pueda ser accedido y usado dentro de dicha función.

Se pueden usar tantos parámetros como sean necesarios, solo es importante que estén encerrados entre llaves {} y los nombres pueden ser alfanuméricos pero no está permitido usar el guión - pero sí el subrayado _. Además, importa el orden de los parámetros pasados a la función anónima, pero no los nombres que se les de. Por ejemplo:

Route::get('posts/{post_id}/comments/{comment_id}', function ($postId, $commentId) {
    return "Este el comentario {$commentId} del post {$postId}";
});

Rutas con filtros o restricciones de expresiones regulares en los parámetros

Cuando un usuario hace una petición HTTP, Laravel busca en los archivos de rutas una definición que coincida con el patrón de la URL según el método HTTP usado y en la primera coincidencia le muestra el resultado al usuario. Por tanto el orden de precedencia de las definiciones de rutas es muy importante.

Para solucionar los posibles conflictos con el parecido en la URL de distintas rutas puedes hacerlo de 2 maneras:

  • Usando el método where para agregar condiciones de expresiones regulares a la ruta. Puedes consultar nuestro tutorial Rutas con filtros en Laravel donde te explicamos detalladamente el uso del método where.
  • Ordenando las rutas de tal manera que las más específicas estén al principio y las más generales al final del archivo de rutas.

Rutas con parámetros opcionales

Cuando el uso de un parámetro no es obligatorio, podemos usar el carácter ? después del nombre del parámetro para indicar que es opcional.  Sin embargo, debe añadirse un valor por defecto al parámetro cuando lo colocamos en la función, por ejemplo:

Route::get('saludo/{name}/{nickname?}', function ($name, $nickname = null) {
    if ($nickname) {
        return "Bienvenido {$name}, tu apodo es {$nickname}";
    } else {
        return "Bienvenido {$name}, no tienes apodo";
    }
});

Material relacionado

Únete a nuestra comunidad en Discord y comparte con los usuarios y autores de Styde, 100% gratis.

Únete hoy

Regístrate hoy en Styde y obtén acceso a todo nuestro contenido.

Lección anterior Introducción a Laravel Lección siguiente Pruebas con Laravel