src/Rest/Traits/Methods/UpdateMethod.php
<?php
declare(strict_types = 1);
/**
* /src/Rest/Traits/Methods/UpdateMethod.php
*
* @author TLe, Tarmo Leppänen <tarmo.leppanen@pinja.com>
*/
namespace App\Rest\Traits\Methods;
use App\DTO\RestDtoInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Throwable;
/**
* @package App\Rest\Traits\Methods
* @author TLe, Tarmo Leppänen <tarmo.leppanen@pinja.com>
*/
trait UpdateMethod
{
/**
* Generic 'updateMethod' method for REST resources.
*
* @param array<int, string>|null $allowedHttpMethods
*
* @throws Throwable
*/
public function updateMethod(
Request $request,
RestDtoInterface $restDto,
string $id,
?array $allowedHttpMethods = null,
): Response {
$resource = $this->getResourceForMethod($request, $allowedHttpMethods ?? [Request::METHOD_PUT]);
try {
$data = $resource->update($id, $restDto, true);
return $this->getResponseHandler()->createResponse($request, $data, $resource);
} catch (Throwable $exception) {
throw $this->handleRestMethodException($exception, $id);
}
}
}