[英]Is it possible to access nodes created with inline entity forms in Drupal 8 in a form alter hook?
我正在一个 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 = \Drupal\user\Entity\User::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();
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.