Использование объекта, возвращаемого Drupal::entityDefinitionUpdateManager()
это правильный способ обновить поля сущности по той же причине, что и hook_update_N()
реализация не вызовет никаких крючок_схема()
реализация для обновления поля базы данных.
Представьте, что позже вы измените сущность и переименуете это поле из ревизия_перевод_аффектед к translation_affected. Если хук обновления, который вы написали, теперь использует массив, возвращенный из baseFieldDefinitions()
и сохраняет его в $поля
, он не найдет никакого значения для поля['revision_translation_affected']
, поскольку baseFieldDefinitions()
уже был обновлен, чтобы вернуть переименованное поле.
Реализации хука обновления должны работать независимо от того, был ли он последним добавленным хуком обновления или нет.
Кроме того, код, используемый из хука обновления, не может быть изменен после того, как этот хук был добавлен. Если обработчик обновления создает поле сущности, которое впоследствии удаляется (например), необходимо добавить новую обработку обновления, чтобы удалить это поле сущности; существующий хук обновления нельзя изменить, чтобы больше не добавлять это поле сущности, или сайты, которые уже запускают этот хук обновления, не увидят, что поле сущности удалено. (Drupal запускает хук обновления только один раз.)