Enrutamiento en Laravel: Guía completa para principiantes
Victor Arana Flores
10 Mar 2023
El enrutamiento es una parte fundamental de cualquier aplicación web. Es el proceso de dirigir solicitudes de los usuarios a diferentes acciones que se ejecutan en el servidor. Laravel, uno de los frameworks más populares para el desarrollo web en PHP, tiene un enrutador integrado que facilita este proceso. En esta guía completa para principiantes, exploraremos cómo funciona el enrutamiento en Laravel y cómo puedes utilizarlo para crear aplicaciones web dinámicas.
¿Quieres llevar tus habilidades en Laravel al siguiente nivel? ¡Adquiere nuestro curso "Laravel de cero a experto" y aprende a desarrollar aplicaciones web de manera efectiva y profesional! Con nuestro completo programa de formación, estarás un paso adelante en tu carrera como desarrollador web. ¡Inscríbete ahora y comienza tu camino hacia el éxito en el desarrollo web!
¿Qué es el enrutamiento en Laravel?
El enrutamiento en Laravel es el proceso de definir las rutas de una aplicación web y cómo deben ser manejadas. Una ruta se define como una URL y una acción que se ejecuta en el servidor cuando se accede a ella. La acción puede ser una función o un método de un controlador que devuelve una respuesta HTTP. El enrutador de Laravel toma la URL solicitada por el usuario y la compara con las rutas definidas en la aplicación para determinar la acción que debe ser ejecutada.
Cómo definir rutas en Laravel
Para definir una ruta en Laravel, se utiliza el método Route::get(), Route::post(), Route::put(), Route::patch() o Route::delete(). Estos métodos corresponden a los diferentes verbos HTTP (GET, POST, PUT, PATCH y DELETE) que se utilizan para manipular recursos en la web. Cada uno de estos verbos HTTP tiene una función específica en la manipulación de datos en la aplicación.
- GET: se utiliza para obtener recursos del servidor. Por ejemplo, si queremos obtener información de un usuario, podemos utilizar una ruta con el verbo GET.
- POST: se utiliza para crear recursos en el servidor. Por ejemplo, si queremos crear un nuevo usuario en la base de datos, podemos utilizar una ruta con el verbo POST.
- PUT: se utiliza para actualizar recursos completos en el servidor. Por ejemplo, si queremos actualizar toda la información de un usuario en la base de datos, podemos utilizar una ruta con el verbo PUT.
- PATCH: se utiliza para actualizar parte de un recurso en el servidor. Por ejemplo, si queremos actualizar solamente el correo electrónico de un usuario en la base de datos, podemos utilizar una ruta con el verbo PATCH.
- DELETE: se utiliza para eliminar recursos del servidor. Por ejemplo, si queremos eliminar un usuario de la base de datos, podemos utilizar una ruta con el verbo DELETE.
Para definir una ruta en Laravel, simplemente llamamos al método correspondiente según el verbo HTTP que queremos utilizar. El primer parámetro es la URL que se desea manejar y el segundo es la acción que se ejecutará.
Por ejemplo, si queremos manejar la URL "/inicio" y devolver una vista de bienvenida, podemos definir la ruta de la siguiente manera utilizando el verbo GET:
Route::get('/inicio', function () {
return view('welcome');
});
En este ejemplo, estamos definiendo una ruta para manejar la URL "/inicio" y estamos devolviendo la vista "welcome". La vista "welcome" es un archivo de plantilla que se encuentra en la carpeta "resources/views".
Para crear una ruta con un verbo HTTP diferente, simplemente cambiamos el método Route correspondiente. Por ejemplo, si queremos crear un nuevo usuario en la base de datos utilizando el verbo POST, podemos definir la ruta de la siguiente manera:
Route::post('/usuarios', function () {
// Código para crear un nuevo usuario en la base de datos
});
En este ejemplo, estamos definiendo una ruta para manejar la URL "/usuarios" con el verbo POST. La función anónima que se ejecuta al acceder a esta ruta contiene el código para crear un nuevo usuario en la base de datos.
De esta forma, podemos utilizar diferentes verbos HTTP en nuestras rutas para manipular recursos de nuestra aplicación de acuerdo a la función específica de cada verbo.
Cómo pasar parámetros en las rutas
Es posible que necesites pasar parámetros a la acción que se ejecuta cuando se accede a una ruta. Por ejemplo, si queremos mostrar el perfil de un usuario en una URL como "/usuarios/1", podemos definir la ruta de la siguiente manera:
Route::get('/usuarios/{id}', function ($id) { return "Mostrando perfil del usuario: ".$id; });
En este ejemplo, estamos definiendo una ruta para manejar URLs que tienen un parámetro "id". Cuando un usuario accede a una URL que coincide con esta ruta, Laravel pasará automáticamente el valor del parámetro a la acción que se ejecuta. En este caso, estamos devolviendo una cadena de texto que incluye el valor del parámetro.
Cómo utilizar controladores en Laravel
Para mantener el código limpio y organizado, es una buena práctica utilizar controladores en lugar de definir todas las acciones en las rutas. Un controlador es una clase que contiene métodos que manejan las solicitudes de una ruta específica.
Para crear un nuevo controlador en Laravel, podemos usar el comando "make:controller
" de Artisan. Este comando creará un nuevo archivo de controlador en el directorio "app/Http/Controllers
" con un esqueleto básico del controlador.
Para crear un controlador llamado "UsuariosController", podemos ejecutar el siguiente comando:
php artisan make:controller UsuariosController
Una vez que hemos creado el controlador, podemos agregar los métodos que necesitamos para manejar las solicitudes en las rutas correspondientes. Por ejemplo, si queremos manejar una solicitud GET en la ruta "/usuarios" con el método "index", podemos agregar el siguiente método al controlador:
public function index()
{
// Código para manejar la solicitud GET en la ruta "/usuarios"
}
Luego, para utilizar el controlador en una ruta, primero debemos importar la clase del controlador al archivo de rutas utilizando la directiva "use". Por ejemplo, si hemos creado la clase "UsuariosController" en el archivo "app/Http/Controllers/UsuariosController.php", podemos agregar la siguiente línea al comienzo del archivo de rutas:
use App\Http\Controllers\UsuariosController;
Luego, para utilizar el controlador en una ruta, debemos especificar la clase del controlador y el nombre del método separados por un coma dentro de un arreglo en el segundo parámetro de la ruta. Por ejemplo, si queremos utilizar el método "index" del controlador "UsuariosController" para manejar la ruta "/usuarios", podemos definir la ruta de la siguiente manera:
Route::get('/usuarios', [UsuariosController::class, 'index']);
En este ejemplo, estamos definiendo una ruta para manejar la URL "/usuarios" y estamos utilizando el método "index" del controlador "UsuariosController" para manejar la acción.
Cómo utilizar grupos de rutas en Laravel
A veces es necesario aplicar ciertas funcionalidades a varias rutas de manera simultánea, como autenticación o autorización. En Laravel, puedes utilizar grupos de rutas para aplicar estas funcionalidades a varias rutas al mismo tiempo. Un grupo de rutas es simplemente un conjunto de rutas que comparten una característica en común.
Para definir un grupo de rutas, se utiliza el método Route::group(). Dentro de este método, puedes definir las rutas que forman parte del grupo y las funcionalidades que se aplicarán a todas ellas. Por ejemplo, si queremos aplicar autenticación a todas las rutas que comienzan con "/admin", podemos definir el grupo de rutas de la siguiente manera:
Route::group(['prefix' => 'admin', 'middleware' => 'auth'], function () {
Route::get('/', [AdminController::class, 'index']);
Route::get('/usuarios', [UsuariosController::class, 'index']);
Route::get('/productos', [ProductosController::class, 'index']);
});
En este ejemplo, estamos definiendo un grupo de rutas que comparten el prefijo "/admin". Además, estamos aplicando el middleware "auth" a todas las rutas del grupo, lo que significa que el usuario debe estar autenticado para acceder a ellas. Dentro del grupo, estamos definiendo tres rutas diferentes que utilizan los métodos "index" de tres controladores diferentes.
Cómo definir rutas con Route::resource
Continuando con el tema de las rutas en Laravel, también existe una forma de generar varias rutas CRUD (Create, Read, Update, Delete) a través de una sola línea de código, y esto se logra mediante el uso de la función Route::resource(). Esta función permite definir un conjunto completo de rutas para un recurso de la aplicación.
Por ejemplo, si tenemos un recurso "producto" que necesita rutas CRUD, podemos definirlo de la siguiente manera:
Route::resource('productos', ProductosController::class);
En este ejemplo, estamos definiendo un conjunto completo de rutas para el recurso "productos", que estarán controladas por el controlador "ProductosController". Estas rutas incluyen las siguientes acciones:
- GET /productos - muestra una lista de todos los productos.
- GET /productos/create - muestra un formulario para crear un nuevo producto.
- POST /productos - guarda un nuevo producto.
- GET /productos/{producto} - muestra un producto específico.
- GET /productos/{producto}/edit - muestra un formulario para editar un producto existente.
- PUT/PATCH /productos/{producto} - actualiza un producto existente.
- DELETE /productos/{producto} - elimina un producto existente.
Es importante tener en cuenta que la función Route::resource() sigue una convención de nomenclatura específica. En este caso, el primer parámetro debe ser el nombre del recurso en plural, mientras que el segundo parámetro es el nombre del controlador que manejará las rutas. Además, todas las rutas generadas por Route::resource() se pueden modificar utilizando los métodos except o only, según sea necesario.
En cuanto a la pregunta sobre cuándo conviene usar un grupo de rutas versus Route::resource(), depende del contexto y de las necesidades específicas de la aplicación. El uso de un grupo de rutas es útil cuando se necesita aplicar ciertas funcionalidades, como autenticación o autorización, a varias rutas al mismo tiempo. Por otro lado, Route::resource() es útil cuando se necesitan rutas CRUD para un recurso específico en la aplicación. En general, se puede utilizar una combinación de ambos en una aplicación de Laravel para cubrir todas las necesidades de ruteo.
Cómo utilizar rutas con nombres en Laravel
A veces es útil asignar un nombre a una ruta para poder hacer referencia a ella de manera más sencilla en otras partes de la aplicación. En Laravel, puedes asignar un nombre a una ruta utilizando el método name(). Por ejemplo, si queremos asignar un nombre a la ruta "/usuarios" para poder hacer referencia a ella en otras partes de la aplicación, podemos definirla de la siguiente manera:
Route::get('/usuarios', [UsuariosController::class, 'index'])->name('usuarios.index');
En este ejemplo, estamos asignando el nombre "usuarios.index" a la ruta "/usuarios". Ahora podemos hacer referencia a ella en otras partes de la aplicación utilizando este nombre en lugar de la URL completa.
Cómo generar URLs en Laravel
En Laravel, puedes generar URLs para tus rutas utilizando el método route(). Este método toma el nombre de la ruta que deseas generar y cualquier parámetro necesario. Por ejemplo, si queremos generar la URL de la ruta con el nombre "usuarios.index", podemos hacerlo de la siguiente manera:
$url = route('usuarios.index');
En este ejemplo, estamos generando la URL de la ruta con el nombre "usuarios.index" y almacenándola en la variable "$url". Si la ruta requiere algún parámetro, puedes pasarlo como segundo argumento del método.
Conclusión
El enrutamiento es una parte fundamental de cualquier aplicación web, y Laravel hace que sea fácil de implementar. En esta guía completa para principiantes, hemos explorado cómo funciona el enrutamiento en Laravel y cómo puedes utilizarlo para crear aplicaciones web dinámicas. Desde definir rutas básicas hasta utilizar controladores y grupos de rutas, esperamos que hayas encontrado esta guía útil para empez