Проверка платформы API не работает при использовании StateProcessor

Мне интересно, является ли это потенциальной проблемой/улучшением платформы API? Как вы знаете, платформа API имеет Государственные процессоры

Но если вы используете процессоры состояний, проверка не будет работать. Вот мой код:

public function process(mixed $data, Operation $operation, array $uriVariables = [], array $context = [])
{
    if ($operation instanceof Post && $data->getPlainPassword()) {
        $hashedPassword = $this->passwordHasher->hashPassword(
            $data,
            $data->getPlainPassword()
        );

        $data->setPassword($hashedPassword);
        $data->eraseCredentials();
    }

    return $this->processor->process($data, $operation, $uriVariables, $context);
}

В моей сущности User я использую ограничение #[UniqueEntity('email')]. Поэтому, если я не буду использовать Symfony Validator в этом процессоре, будет выдано исключение.

An exception occurred while executing a query: Duplicate entry '[email protected]' for key 'user.UNIQ_8D93D649E7927C74'

Итак, решение:

$errors = $this->validator->validate($data);

if (count($errors) > 0) {
    throw new ValidationException($errors);
}

Я нашел ваши вопросы, исследуя свою проблему, у меня та же проблема с утверждением и процессором из руководства по медиа-объектам из самой документации платформы API (api-platform.com/docs/core/file-upload). Когда я найду решение, я опубликую его здесь. Я все еще расстроен. давайте держаться подальше :^)

episch 12.05.2024 21:27
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
1
104
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Хорошо, я нашел решение: убедитесь, что проверка вызывается перед делегированием внутреннему процессору. Вы можете вызвать интерфейс проверки прямо в своем процессе, чтобы использовать их там. Если вы используете классы процессов, то метод validationListener из ApiPlatform больше не вызывается, поэтому вам придется самостоятельно настроить этот небольшой код в своем процессе.

    <?php

    ....
    use Symfony\Component\Validator\Validator\ValidatorInterface;
    
    class MyProcessor implements ProcessorInterface
    {
        ...
        private ValidatorInterface $validator;
    
        public function __construct(...., ValidatorInterface $validator)
        {
            ....
            $this->validator = $validator;
        }
    
        public function process($data, Operation $operation, array $uriVariables = [], array $context = []): void
        {
            // Validate data
            $violations = $this->validator->validate($data);
            if (count($violations) > 0) {
                throw new \ApiPlatform\Exception\ValidationException($violations);
            }
    
            .....
        }
    }

Спасибо за ваше исследование, я отмечу этот ответ как правильный, но в своем вопросе я использовал тот же подход. Похоже, другого способа, кроме как проверить данные прямо в процессоре, нет. Спасибо!

Deadpool 22.06.2024 07:46

Другие вопросы по теме