Ответ 1
Ни один из них не является частью Symfony. Они являются частью Doctrine2. prePersist срабатывает в том случае, когда объект сначала сохраняется. Сохранение объекта означает, что он управляется EntityManager Doctrine, даже если он фактически не вставлен в базу данных до флеша.
preUpdate - это соответствующее событие на существующем объекте, который должен быть обновлен. Поскольку существующий объект уже управляется entityManager в момент его запроса, нет эквивалентного события persist. Он в основном срабатывает, когда существующий объект был изменен, и вызывается флеш.
Другими словами, , если вы ничего не изменили в объекте, PreUpdate не будет запущен!
С учетом сказанного вы можете думать об этом как о происходящем "непосредственно перед вставкой" и "непосредственно перед обновлением".
Есть также две формы: обратные вызовы жизненного цикла, которые могут быть аннотированы непосредственно в сущности и добавлены как методы внутри нее, но имеют доступ только к атрибутам сущности. Это может быть полезно для простых манипуляций, таких как временная привязка, соответствие строк конкретному стандарту или генерация полученных атрибутов.
Существуют также истинные прослушиватели событий, которые должны быть зарегистрированы в entityManager и иметь доступ к данным о событиях, которые имеют тип до/после данных, которые вы ожидаете в триггере базы данных.
Обратите внимание, что в Doctrine version 2.4 они добавили данные о событиях даже для обратных вызовов Lifecycle, что теперь делает намного проще и проще сделать то же самое которые вам раньше нужно было использовать для прослушивания событий.