如何从传递的令牌中获取提交的表单数据

How to get submitted form data from passed token

在 Drupal 8(最新版本)中,我使用 webform 模块创建了多步 webform。提交最后一步后,我最终进入了确认页面,url 看起来像:

/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 吗?

通过查看网络表单模块确认操作找到了解决方案。是这样的:

    $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);
    }