Blog de Gonzalo

Blog de programación de Gonzalo López

DEFINIR RUTAS EN LARAVEL 11

PHP

Es bastante sencilo definir rutas en Laravel 11. En Laravel 11 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 si yo pongo en el navegador " https://dominio.xx/producto/create" devolverá "Producto create", porque el patrón coincide con la url, para que salga la páginma 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.

Compartir en twitter