Состояние формы Drupal: перенаправление в формах – методы и примеры

В Drupal формы являются важной частью создания интерактивных веб-сайтов и приложений. Перенаправление пользователей после отправки формы является общим требованием во многих сценариях. В этой статье блога мы рассмотрим различные методы достижения перенаправления формы с использованием API состояния формы Drupal. Мы предоставим примеры кода для демонстрации каждого метода. Давайте погрузимся!

Метод 1: использование параметра запроса «destination».
Один простой способ перенаправить пользователей после отправки формы — использовать параметр запроса «destination». Этот метод требует добавления желаемого целевого URL-адреса к атрибуту действия формы. Вот пример:

use Drupal\Core\Url;
public function buildForm(array $form, FormStateInterface $form_state) {
  // Get the current path.
  $current_path = \Drupal::service('path.current')->getPath();
  // Build the destination URL.
  $destination = Url::fromUserInput('/custom-destination')->toString();
  // Append the destination to the form's action attribute.
  $form['#action'] = Url::fromUserInput($current_path, ['query' => ['destination' => $destination]])->toString();
  // Rest of the form building code...
}

Метод 2: использование метода submitForm().
Другой способ перенаправления пользователей после отправки формы — переопределение метода submitForm()и использование метода setRedirect(). внутри. Вот пример:

use Drupal\Core\Form\FormStateInterface;
use Symfony\Component\HttpFoundation\RedirectResponse;
public function submitForm(array &$form, FormStateInterface $form_state) {
  // Process the form submission.
  // Redirect the user to a custom destination.
  $form_state->setRedirect('custom_route_name');
}

Метод 3: реализация метода FormStateInterface::setRedirect()
Класс FormStateInterfaceпредоставляет метод setRedirect(), который позволяет указать маршрут назначения и любые необходимые параметры. Вот пример:

use Drupal\Core\Form\FormStateInterface;
public function submitForm(array &$form, FormStateInterface $form_state) {
  // Process the form submission.
  // Redirect the user to a custom destination.
  $form_state->setRedirect('custom_route_name', ['param1' => 'value1', 'param2' => 'value2']);
}

Перенаправление пользователей после отправки формы — обычное требование при разработке Drupal. В этой статье мы исследовали три различных метода достижения перенаправления формы с помощью API состояния формы Drupal. Добавив параметр запроса «destination», используя метод submitForm()или реализовав метод FormStateInterface::setRedirect(), вы можете легко перенаправить пользователей в настраиваемые места назначения. Выберите метод, который лучше всего соответствует вашим конкретным потребностям, и улучшите удобство использования вашего веб-сайта или приложения Drupal.

Не забудьте выполнить все проверки или проверки безопасности при реализации перенаправления формы, чтобы обеспечить плавное и безопасное взаимодействие пользователя.