¡Esta es una revisión vieja del documento!
Tabla de Contenidos
Rutas en Laravel
Según lo que se indique por URL, Laravel servirá uno u otro contenido. Esto está definido en las rutas, que están en el directorio app/routes. 
app/Providers/RouterServiceProvider.php es el provider relacionado con las rutas. El trabajo de los providers, una vez cargados por el kernel, es registrar diferentes componentes necesarios por el kernel
Por ejemplo, el fichero app/routes/web.php:
Route::get('/', function () { return view('welcome'); }); Route::get('/hola', function () { return "Hola, mundo!"; });
En el ejemplo anterior tenemos definidas 2 rutas: la principal (cuando no se pasa nada más por URL que el dominio donde está la aplicación) y hola, es decir, cuando vamos a miweb.com/hola
Si queremos pasar alguna “variable” a una ruta, lo haríamos de la siguiente manera:
Route::get('mundo/{pais}', function($pais) { return "Información del país $pais"; });
Al ir a la página miweb.com/mundo/italia, obtendremos el contenido “Información del país Italia”.
Se pueden añadir más variables:
Route::get('mundo/{pais}/{ciudad}', function($pais, $ciudad) { return "Información de la ciudad $ciudad, de $pais"; });
Si alguna es opcional, se indica con un signo de interrogación:
Route::get('mundo/{pais}/{ciudad?}', function($pais, $ciudad = null) { if ($ciudad) { return "Información de la ciudad $ciudad, de $pais"; } else { return "Información de $pais"; } });
Crendo rutas
Route::get("/", function () { return view("welcome"); })->name("main");
Vemos que se compone de verbo HTTP, URL y la acción a realizar y el nombre.
Otra ruta:
Route::get("products", function () { return "This is the list of products"; })->name("products.index");
Estaría accesible en http://localhost:8080/products.
Ruta para mostrar un formulario para la creación de productos:
Route::get("products/create", function () { return "This is the form to create a product"; })->name("products.create");
Route::post("products", function () { // })->name("products.store");
Incluyendo parámetros en una petición GET:
Route::get("products/{product}", function ($product) { return "Showing producto with ID {$product}"; })->name("products.show");
Lo que pasamos por la URL lo puede recibir la función anónima.
Creamos más rutas para el resto de acciones como editar un producto y eliminar:
// Ruta para el formulario de edición: Route::get("products/{product}/edit", function ($product) { return "Showing the form to edit the product with ID {$product}"; })->name("products.edit"); // Ruta para la actualización del producto // 'match' permite que se pueda atender a dos verbos: Route::match(["put", "patch"], "products/{product}", function ($product) { // })->name("products.update"); // Ruta para la eliminación del producto Route::delete("products/{product}", function ($product) { // })->name("products.destroy");
Podemos ver información sobre esas rutas mediante:
php artisan route:list
Asignar nombre a las rutas
Una práctica recomendada es asignar un nombre a las rutas:
Route::get('/', function() {
    return view("welcome");
})->name("main");
De esta manera, podemos cambiar la URL sin miedo porque el nombre que le dimos se mantiene.
Artisan
Si queremos ver todas las rutas registradas:
php artisan route:list
Desde tinker podemos ver las rutas por el nombre usando el helper route:
>>> route('main');
=> "http://localhost"
Métodos para enrutar
Las rutas responden a un verbo HTTP (GET, POST, PUT…)
Llamar a las rutas
Usando el helper route podemos obtener la URL de cada ruta.
<a class="btn btn-success" href="{{ route("products.create") }}">Create</a> <!-- --> <td> <a class="btn btn-link" href="{{ route("products.show, ["product" => $product->id]) }}>Show</a> <a class="btn btn-link" href="{{ route("products.edit, ["product" => $product->id]) }}>Edit</a> </td> <!-- -->
