Перенаправление после отправки формы


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

Если вы хотите установить buildform вам нужно использовать какой-нибудь путь маршрутизации, например.

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 ().
imclean

0

Если вы хотите перенаправить форму редактирования пользователя на домашнюю страницу или другую страницу, следуйте приведенному ниже коду.

Во-первых, add-hook - hook_form_alter`

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.