@DoctrineAssert \ UniqueEntity () в объекте - как я могу передать это с помощью события доктрины

есть такая сущность продукта:

/**
 * Class Product.
 *
 * @DoctrineAssert\UniqueEntity("itemNumber")
 * 
 */
class Product
{
    /**
     * @ORM\Column(type = "string", length=64, unique=true)
     */
    private $itemNumber;
    .
    .
    .

Но в некоторых случаях я хочу переопределить это «уникальное» поведение. Мне нужно это переопределение на уровне формы. На уровне базы данных следует сохранить уникальное поведение. Я хотел бы добиться того, чтобы с помощью события формы номер статьи получил префикс. Что-то вроде этого:

/**
 * Class BaseProductEventListener.
 */
class ProductCreateListener
{   
    /**
     * @param LifecycleEventArgs $eventArgs
     */
    public function prePersist(LifecycleEventArgs $eventArgs)
    {
        $entity = $eventArgs->getObject();

        if (!$entity instanceof Product) {
            return;
        }

        if (!$entity->getCategories() instanceof ArrayCollection) {
            return;
        }

        if (isset($entity->getCategories()[0])) {
            $firstCat = $entity->getCategories()[0];

            if ($firstCat->getNameSlug() == 'my_nameslug') {
                $entity->setItemNumber('my_prefix_'.$entity->getItemNumber());
            }
        }
    }
}

Итак, если у моего продукта есть определенная категория, номер позиции получит префикс на уровне базы данных.

Проблема в том, что мое событие сработает ПОСЛЕ утверждения сущности: @DoctrineAssert \ UniqueEntity ("itemNumber")

Как я могу изменить это так, чтобы мое событие сначала меняло номер статьи, а утверждение сущности проверялось позже в форме?

Стоит ли изучать 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
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Если вам это нужно на уровне формы, вы всегда можете добавить прослушиватель событий формы. Пример:

->addEventListener(FormEvents::PRE_SUBMIT, function (FormEvent $event) {
                $form = $event->getForm();
                $data = $event->getData();
                //// your logic here ...

})

Это перехватывает данные перед их отправкой формой, задолго до события Doctrine persist.

События формы документы здесь.

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