Сохранение вновь созданной сущности со значениями по умолчанию из файла конфигурации, которые неизменяемы для последующего сохранения

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

Есть несколько приложений, использующих одну и ту же кодовую базу, с разными конфигурациями.

Моя первоначальная идея заключалась в том, чтобы использовать pre-persist listener, загрузить значения конфигурации и все готово, но проблема в том, что эти атрибуты НЕ должны изменяться после создания объекта, даже если файл конфигурации изменяет исходную конфигурацию объекта, чтобы оставаться в том виде, в котором они были изначально. Даже если объект загружен в форму и повторно сохранен с измененными другими значениями, эти конкретные начальные настройки приложения должны быть установлены только при создании объекта и сохранены в течение всего жизненного цикла объекта, как они были в начале.

Я понимаю, что можно установить значения в сущности с помощью установщиков сущности, но поскольку эти сущности создаются в разных местах приложения, я думал, что использование хука pre-persist уменьшит дублирование кода.

Есть ли способ определить, создан ли объект заново или другой слушатель, который я мог бы использовать? Я бегло просмотрел документацию и не увидел слушателей, специфичных для создания объекта.

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

Есть ли способ достичь того, что я пытаюсь сделать, какой-то способ установить значения при создании объекта, которые не меняются при последующих сохранениях?

pre-persist звуки должны быть событием, которое вы ищете; срабатывает только при начальной вставке. doctrine-project.org/projects/doctrine-orm/en/latest/referen‌ ce /…: «... Следует отметить, что это событие запускается только при первоначальном сохранении объекта (т.е. оно не запускается при будущих обновлениях)».

ejuhjav 06.07.2018 08:42
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
0
1
58
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Вы на правильном пути. Конечно, вы можете использовать событие prePersist, как указано в документации.

https://www.doctrine-project.org/projects/doctrine-orm/en/2.6/reference/events.html#lifecycle-events

prePersist - The prePersist event occurs for a given entity before the respective EntityManager persist operation for that entity is executed. It should be noted that this event is only triggered on initial persist of an entity (i.e. it does not trigger on future updates).

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

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