是否可以在表单变更挂钩中访问Drupal8中使用内联实体表单创建的节点



我正在开发一个Drupal网站,该网站通过对Children和Parent内容类型的实体引用来建模Family内容类型。家庭是在一个单一的表格中输入的,我使用内联实体表格模块(IEF(可以在同一表格中输入父母和孩子的信息。我的目标是允许匿名用户通过填写此表格创建用户帐户。目前,我有一个自定义模块,它实现了hook_form_form_ID_alter,并在提交操作中添加了一个函数,该函数创建了一个新的用户帐户,并设置了外部表单节点(本例中为Family节点(的所有者:

function myModule_form_node_family_form_alter(&$form, &$form_state, $form_id){ 
#register function on submit as that's when the node id of the created entity is available              
$form['actions']['submit']['#submit'][] = 'signup_submit';
}
function signup_submit($form, &$form_state){
#get node id of newly created entity
$nid = $form_state->getValue('nid');
#create user
$email = $form_state->getValue('field_email_address')[0]['value'];
$user = DrupaluserEntityUser::create();
$user->setEmail($email);
$user->enforceIsNew();
$user->setPassword(getRandomPassword());
$user->setUsername(genUsername($nid));
if($res){
#set user to be owner of newly created node
dpm("User ".$user->id()."created successfully!");
$node = node_load($nid);
$node->setOwner($user);
$node->save();
}
}

我希望使用类似的模式为IEF创建的节点做同样的事情:

function myModule_inline_entity_form_entity_form_alter(&$entity_form, &$form_state){
$entity_form['actions']['submit']['#submit'][] = 'inline_submit';
}
function inline_submit(&$entity_form, &$form_state){
$nid = $form_state->getValue('nid');
dpm("nid of inline entity: ".$nid);
}

但它似乎不起作用。如果有人知道节点是什么时候真正创建的,以及我如何访问节点id以便更改所有权,我将不胜感激!

我最终找到了一个解决方案。对于内联表单,直到完整的表单提交后,内容才真正提交,所以我可以在外部表单的表单提交挂钩上从引用的实体中获取nid:

function myModule_form_node_FORM_ID_alter(&$form, &$form_state, $form_id){
#register my on_submit callback
$form['actions']['submit']['#submit'][] = 'myModule_form_submit';
}
function myModule_form_submit($form, &$form_state){
$fnode = $form_state->getFormObject()->getEntity();
#in my case the field was a multiple entity reference, so loop over each created node
foreach($fnode->field_children->referencedEntities() as $cnode){
# do stuff with the child node in $cnode
$cnode->save();
}
}

最新更新