Вы должны сгенерировать исключение, а затем сконфигурировать вашу api_platform для обработки этого исключения. ApiPlatform преобразует исключение в ответ с сообщением и указанным кодом.
Step1: Создать выделенный класс исключений
<?php
// api/src/Exception/ProductNotFoundException.php
namespace App\Exception;
final class AdminNonDeletableException extends \Exception
{
}
Step2: In ваши данные сохраняются, выведите исключение:
public function remove($data, array $context = [])
{
/* @var Admin $data */
#The Manager can never be deleted:
if( $data->getManager() ){
throw new AdminNonDeletableException('thisAdminIsManager');
}
$this->manager->remove($data);
$this->manager->flush();
}
Шаг 3: Добавьте свое исключение в файл config / package / api_platform.yaml и объявите кодовый номер (414)
# config/packages/api_platform.yaml
api_platform:
# ...
exception_to_status:
# The 4 following handlers are registered by default, keep those lines to prevent unexpected side effects
Symfony\Component\Serializer\Exception\ExceptionInterface: 400 # Use a raw status code (recommended)
ApiPlatform\Core\Exception\InvalidArgumentException: !php/const Symfony\Component\HttpFoundation\Response::HTTP_BAD_REQUEST
ApiPlatform\Core\Exception\FilterValidationException: 400
Doctrine\ORM\OptimisticLockException: 409
# Custom mapping
App\Exception\AdminNonDeletableException: 414 # Here is the handler for your custom exception associated to the 414 code
Вы можете найти больше информации в главе обработки ошибок