Перенаправление страницы в пользовательской базе данных WebformHandlerBase
Я написал пользовательскую базу веб-форм и прикрепил ее к многостраничной веб-форме. Благодаря этому я могу получить значения в пользовательский обработчик, как только пользователь нажмет на следующую страницу> кнопка
class MyFormHandler extends WebformHandlerBase {
public function submitForm(array &$form, FormStateInterface $form_state, WebformSubmissionInterface $webform_submission) {
$form_id = 'webform_submission_' . $webform_submission->getWebform()->id() . '_form';
if($form_id == 'webform_submission_registration_content_form') {
$values = $webform_submission->getData();
/* custom code to calculate the score based on the values */
$eligible_to_participate = 1;
if ($score >= x && $score <= y) {
$eligible_to_participate = 1;
}
else
{
$eligible_to_participate = 0;
}
if($eligible_to_participate == 0) {
// This user is not eligible so redirect to 'finish page'
/* The below code is not working
* how-ever the same code is working in hook_form_FORM_ID_alter()
*/
$url = Url::fromRoute('entity.node.canonical', ['node' => 78]);
$response = new RedirectResponse($url->toString());
$response->send();
}
}
}
}
На основе выбранных пользователем значений мне нужно перенаправить пользователя на другую страницу, и код для этого выглядит следующим образом
use Drupal\Core\Url;
use Symfony\Component\HttpFoundation\RedirectResponse;
$url = Url::fromRoute('entity.node.canonical', ['node' => 78]);
$response = new RedirectResponse($url->toString());
$response->send();
Теперь проблема в том, что этот код не работает в пользовательской функции обработчика. Если я напишу тот же код в hook_form_FORM_ID_alter() работает нормально.
Есть идеи, где я делаю неправильно? Любая помощь будет очень признательна.
1 answers
<?php
namespace Drupal\sa_webform\Plugin\WebformHandler;
use Drupal\Core\Session\AccountInterface;
use Drupal\Core\Serialization\Yaml;
use Drupal\Core\Form\FormStateInterface;
use Drupal\webform\Plugin\WebformHandlerBase;
use Drupal\webform\webformSubmissionInterface;
/**
* Form submission handler.
*
* @WebformHandler(
* id = "my_webform_handler",
* label = @Translation("My webform handler"),
* category = @Translation("Webform Handler"),
* description = @Translation("Calculate the score with webform
* submissions"),
* cardinality =
* \Drupal\webform\Plugin\WebformHandlerInterface::CARDINALITY_SINGLE,
* results =
* \Drupal\webform\Plugin\WebformHandlerInterface::RESULTS_PROCESSED,
* )
*/
class MyWebformHandler extends WebformHandlerBase {
/**
* {@inheritdoc}
*/
public function submitForm(array &$form, FormStateInterface $form_state,
WebformSubmissionInterface $webform_submission) {
$form_id = 'webform_submission_' . $webform_submission->getWebform()-
>id() . '_form';
if($form_id == 'webform_submission_xxx_form') {
$values = $webform_submission->getData();
/* Take the action based on the Webform submission values */
}
}
public function confirmForm(array &$form, FormStateInterface
$form_state, WebformSubmissionInterface $webform_submission) {
$form_id = 'webform_submission_' . $webform_submission->getWebform()-
>id() . '_form';
if($form_id == 'webform_submission_xxx_form')
{
if(based_on_some_condition) {
/* Here 12 is the node id where i wanted to redirect to */
$form_state->setRedirect('entity.node.canonical',['node' => 12]);
}
}
}
?>
Для получения дополнительных примеров обратитесь к коду src модулей веб-формы, расположенному по адресу webform\src\Plugin\Webformhandler
BrokenWebformHandler.php
DebugWebformHandler.php
EmailWebformHandler.php
RemotePostWebformHandler.php