CREAR RUTAS EN LARAVEL

Crear rutas en Laravel es bastante sencillo. En Laravel las rutas se definen dentro del fichero "web.php" dentro de la carpeta "routes" de la siguiente manera:

Route::get('/', function () {
    return view('welcome');
});
Donde la barra es la uri de la ruta y el return view devuelve la plantilla que tiene contenido. Otro ejemplo sería:

Route::get('/contacto', function () {
    return view('contacto');
});
La ruta seria https://dominio.xx/contacto y cargaría la plantilla con todo lo referente al contacto. Laravel va a verificar el tipo de petición:
  • GET:

    Route::get('/contacto', function () {
        return view('contacto');
    });
    
  • POST:

    Route::post('/alta-usuario', function () {
        return view('altaUsuario');
    });
    
  • PUT:

    Route::put('/alta-usuario', function () {
        return view('altaUsuario');
    });
    
  • PATCH:

    Route::patch('/alta-usuario', function () {
        return view('altaUsuario');
    });
    
  • DELETE:
    Route::delete('/borrar-usuario', function () {
        return view('borrarUsuario');
    });
    
Ojo para cualquier llamada que no sea get tiene que hacerse mediante la petición que espera Laravel, sino va a dar error. Para pasar parámetros a la siguiente ruta se hace:

Route::get('/producto/{idProducto}', function ($idProducto) {
    return 'Producto:'.$idProducto
});
Como podéis ver el después de la uri esta definido "{idProducto}" y a la función se le pasa el parámetro "$idProducto", con eso bastaría, pero ojo tienen que coincidir en el nombre. Se pueden pasar varios parámetros a la ruta, y pueden ser definidos como parámetros opcionales.
Para definir un parámetro como opcional hay que añadir "?" dentro de las llaves que definen el parámetro.

Route::get('/producto/{idProducto}/{categoria?}', function ($idProducto,$categoria=null) {
    return 'Producto:'.$idProducto
});
En el ejemplo anterior el parámetro "categoria" tiene el "?" y en el parámetro de la función tiene asignado un valor por defecto "null". Con eso bastaría para crear parámetros variables. Es muy importante el orden de las rutas en Laravel:

Route::get('/producto/{idProducto}', function ($idProducto) {
    return 'Producto:'.$idProducto
});
Route::get('/producto/create', function ($idProducto) {
    return 'crear';
});
En el ejemplo anterior hay dos rutas, una con parámetro variable y otra con uri normal. Pero según están definidas sise escribe en el navegador " https://dominio.xx/producto/create" devolverá "Producto create", porque el patrón coincide con la url, para que salga la página definida en "/producto/create" las rutas tendrían que estar definidas así:

Route::get('/producto/create', function ($idProducto) {
    return 'crear';
});
Route::get('/producto/{idProducto}', function ($idProducto) {
    return 'Producto:'.$idProducto
});
Esto han sido ejemplos sencillos pero lo suyo es usar controladores y para crear rutas que llamen a controladores se hace de la siguiente manera. Vamos a suponer que los controladores ya están definidos:

use App\Http\Controllers\ContactoController;
Route::get('/contacto', [ContactoController::class,'index']);
En el ejemplo anterior primero se referencia al controlador con el use y su ruta y luego, en vez de usar una función callback se pone en un array el nombre del controlador y el método que se va a usar. Para el tema de los parámetos se hace de la siguiente manera:

use App\Http\Controllers\ProductoController;
Route::get('/producto/{idProducto}', [ProductoController::class,'index']);
Por ahora es normal, solo que el parámetro hay que ponérselo en el método del controlador al que referencia la ruta: "public function index($idProducto)" (esto sería en el controlador "ProductoController").
También es posble crear rutas con nombres.