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

时间:2019-05-13 13:08:53

标签: token drupal-8 submission drupal-webform

在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?

1 个答案:

答案 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);
    }