如何更改Drupal实体捆绑包

时间:2018-09-20 11:19:28

标签: php drupal drupal-8

我有一个由外部模块提供的自定义实体,并且已经定义了两个捆绑包,我们将它们称为basicextended。它们具有相同的基本字段,但是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挂钩以避免重新加载实体? 还有其他解决方法吗?

谢谢。

0 个答案:

没有答案