在Drupal 8(最新版本)中,我使用webform模块创建了多步骤Webform。提交最后一步后,我进入确认页面,该页面的网址如下:
/node/1/webform/confirmation?token=KxCIo9eUxHC_XJKtDG8erszn5BL5UHBZnRrvJU7Kirw
现在,我想创建自定义确认页面,并且已经创建了一个模块,该模块可以创建自定义页面并且可以正常工作。它应该被称为类似的方式:
/confirmation?token=KxCIo9eUxHC_XJKtDG8erszn5BL5UHBZnRrvJU7Kirw
我的问题是:如何使用此令牌值收集提交的表单数据?
在我的确认页面控制器中尝试过类似的操作:
$token = \Drupal::request()->query->get('token');
$webform_submission = \Drupal\webform\Entity\WebformSubmission::load($token);
// Get submission data.
$data = $webform_submission->getData();
// var_dump($data);
$token
的值可以很好地收集,但是当我尝试使用它来获取$webform_submissions
时,我得到的是空值,并且收集$data
当然在下一行会失败。
该load()
方法期望使用$sid
(会话ID),但我不确定此令牌是否为ID?
答案 0 :(得分:0)
通过查看Webform模块确认操作找到了解决方案。像这样:
$token = \Drupal::request()->query->get('token');
if ($token) {
/** @var \Drupal\webform\WebformSubmissionStorageInterface $webform_submission_storage */
$webform_submission_storage = \Drupal::entityTypeManager()->getStorage('webform_submission');
if ($entities = $webform_submission_storage->loadByProperties(['token' => $token])) {
$webform_submission = reset($entities);
}
$data = $webform_submission->getData();
var_dump($data);
}