Перенаправлення після подання форми


15

Я створюю власну форму в Drupal 8, я пам’ятаю, що ми можемо переспрямувати на спеціальний шлях у Drupal 7, встановивши $form_state['redirect'] = 'mycustompath';в користувальницькому обробці подання, але як можна перенаправляти користувача після подання форми в Drupal 8?

Я знаю, що я повинен використовувати submitFormметод:

public function submitForm(array &$form, FormStateInterface $form_state)
{
   //submissions jobs ...
   //redirect path
}

Відповіді:


30

У вашому методі "submitForm" напишіть код нижче

 $form_state->setRedirect('machine_name');
 return;

де machine_nameім'я машини згадується у файлі маршрутизації.

Я сподіваюся, що це допомагає .. :)


не працює. Я спробую свій власний маршрут $form_state->setRedirect('/start');return;, припустимо, я хочу переспрямувати на головну сторінку. що таке точний фрагмент?
Юсеф

1
$ form_state-> setRedirect ('<наперед>'); повернення;
parth.k

це не повинно бути "/ start". Це псевдонім, згаданий у файлі маршрутизації.
parth.k

'<front>'працював, що ти про псевдонім шляху? це мій маршрутtcdev.content: path: '/start' defaults: _controller: 'Drupal\tcdev\Controller\TrainingCenterController::content' _title: 'Start Training Center' requirements: _permission: 'access content'
Юсеф

Це має бути $ form_state-> setRedirect ('tcdev.content');
parth.k

8

Якщо ви хочете встановити форму збірки, вам потрібно скористатися деяким маршрутом, наприклад.

use Drupal\Core\Url;

$url = Url::fromRoute('route.path');
$form_state->setRedirectUrl($url);

що таке простір імен Url? Url' not found
Юсеф

має бути use Drupal\Core\Url;(без попередньої косої риски)
ummdorian

$form_state->setRedirectUrl($url);може також використовуватися в submitForm ().
Шаун Дичко

Перевірте API: api.drupal.org/api/drupal/… . setRedirect () просто перетворює маршрут спочатку в URL-адресу, а потім викликає setRedirectUrl ().
нечистий

0

Якщо ви хочете перенаправити форму користувача для редагування на домашню або іншу сторінку, перейдіть нижче за кодом.

По-перше, додавання-гачок - гачок_форма_алтер`

function yourmodulename_form_alter(&$form, FormStateInterface $form_state, $form_id) 
{
    if ($form_id === 'your form id') {
    $form['actions']['submit']['#submit'][] = 'modulename_user_edit_form_submit';
  } 
}

після додавання гака додайте нижче функцію

function modulename_user_edit_form_submit($form,  FormStateInterface &$form_state) {
  global $base_url; //set base path
  $response = new Symfony\Component\HttpFoundation\RedirectResponse($base_url ."/xyz"); //set url
  $response->send();
  return;
}

Я сподіваюся, що це допоможе.


Чи це не обходить усі оброблювачі подання, які повинні стріляти після вашого обробника?
жокери

Ви повинні мати лише $form_state->setRedirect()форму подання, щоб усі інші обробники подання могли бути оброблені.
жокери
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.