Как изменить набор сущностей друпал - PullRequest
0 голосов
/ 20 сентября 2018

У меня есть пользовательский объект, предоставляемый внешним модулем, и я определил два пакета, назовем их basic и extended.У них одинаковые базовые поля, но у extended есть некоторые дополнительные.Мне нужно преобразовать из basic в extended (но не наоборот), но я сталкиваюсь с проблемами, так как extended имеет некоторые обязательные поля.

Действие, которое изменяет пакет и вызывает$entity->save() и затем перенаправление в форму редактирования несколько работает, но в случае возникновения проблемы или когда пользователь закрывает окно, сущность остается в недопустимом состоянии, поскольку обязательные поля никогда не устанавливаются и вызывают проблемы в дальнейшем.

Я также попытался переопределить форму, загрузив одну extended, скопировав значения и изменив пакет после проверки, но это вызывает loadUnchanged() и завершается неудачно при проверке новых полей, так как они непока не существует.Это соответствующий код:

$basic_entity = ExternalEntity::load($route_match->getParameter('id'));
$extended_entity = \Drupal::entityTypeManager()->getStorage('external_entity')
    ->create(array(
    'type' => 'extended',
    )
);

$fields = $basic_entity->getFields();

foreach ($fields as $name => $value) {
    $extended_entity->set($name, $value->value);
}

$extended_entity->set('type', 'extended');
$extended_entity->enforceIsNew(false);
$extended_entity->setValidationRequired(FALSE);

$form = \Drupal::service('entity.form_builder')->getForm($extended_entity);

Как удалить хук preSave, чтобы избежать повторной загрузки объекта?Есть ли другой способ сделать это?

Заранее спасибо.

...