В Drupal 8 (последняя версия) у меня есть многоступенчатая веб-форма, созданная с помощью модуля веб-формы. После отправки последнего шага я попадаю на страницу подтверждения, 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
(идентификатор сеанса), и я не уверен, является ли этот токен таким идентификатором?
Нашел решение, посмотрев действие подтверждения модуля веб-формы. Выходит так:
$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);
}