Laravel 11, route doesn’t accept either PUT or DELETE methods, even when they are declared in web.php. I also tried making the put method a post with the id for the client, but it just went to the add method.
web.php
Route::post('customers', [CustomerController::class, 'add']);
Route::get('customers', [CustomerController::class, 'show']);
Route::get('customer/{id}', [CustomerController::class, 'getCustomer']);
Route::put('customer/{id}', [CustomerController::class, 'update']);
Route::delete('customer/{id}', [CustomerController::class, 'delete']);
CustomerController
public function update(Request $request, $id) {
$cliente = Cliente::find($id);
if (!$cliente) {
return response()->json(['message' => 'Cliente no encontrado'], 404);
}
$validatedData = $request->validate([
'usuario_id' => 'sometimes|exists:usuarios,id',
'DNI' => 'sometimes|string|max:20|unique:clientes,DNI' . $id,
'nombre' => 'sometimes|string|max:255',
'nombreUsuario' => 'sometimes|string|max:255',
'apellidos' => 'sometimes|string|max:255',
'email' => 'sometimes|email|unique:usuarios,email' . $cliente->usuario_id,
'tlf' => 'sometimes|string|max:20',
'direccion' => 'sometimes|string|max:255',
'municipio' => 'sometimes|string|max:255',
'provincia' => 'sometimes|string|max:255',
'contrasena' => 'sometimes|string|min:8',
]);
$cliente->update($validatedData);
if ($request->has('usuario')) {
$usuarioData = $request->input('usuario');
$cliente->usuario->update($usuarioData);
}
return response()->json($cliente->load('usuario'), 200);
}
User and client tables
User
$table->id();
$table->string('email')->unique();
$table->string('contrasena');
$table->string('nombre');
$table->string('nombreUsuario');//->default('nombreusuario');
$table->rememberToken();
$table->timestamps();
Client
$table->id();
$table->foreignId('usuario_id')->constrained()->cascadeOnDelete()->cascadeOnUpdate();
$table->string("apellidos");
$table->string('tlf');
$table->string('direccion');
$table->string('municipio');
$table->string('provincia');
$table->string('DNI');
$table->timestamps();