Symfony предотвращает работу объекта с помощью прослушивателей

Я пытаюсь реализовать SoftDelete. Да, я знаю о Гедмо.

Я пытаюсь реализовать следующую логику, чтобы установить значение softdelete вместо удаления объекта:

#[AsDoctrineListener(Events::preRemove)]
class SoftDeleteEventListener
{
    public function preRemove(PreRemoveEventArgs $args): void
    {
        $entityManager = $args->getObjectManager();
        $entity = $args->getObject();
        $reflection = new \ReflectionClass($entity);
        $traits = $reflection->getTraitNames();

        if (in_array(SoftDeleteTrait::class, $traits)) {
            $entity->setDeletedAt(new \DateTimeImmutable());
            // cancel the deletion and persist the entity
            return;
        }
        
        // Go with the usual flow, flush
    }
}

Приведенный выше код приводит к удалению объекта.

Я использую платформу API, поэтому ищу единую логику для всех моих объектов без необходимости реализовывать ее в пользовательских контроллерах.

Я использую Symfony 7.

Спасибо

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать 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 и хотите разрабатывать...
1
0
56
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

В итоге я использовал процессор состояния платформы API:

class SoftDeleteStateProcessor implements ProcessorInterface
{
    public function __construct(private readonly EntityManagerInterface $entityManager)
    {}

    public function process(mixed $data, Operation $operation, array $uriVariables = [], array $context = []): void
    {
        $data->setDeletedAt(new \DateTimeImmutable());
        $this->entityManager->persist($data);
        $this->entityManager->flush();
    }
}

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

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