Chuyển hướng sau khi gửi biểu mẫu


16

Tôi tạo Biểu mẫu tùy chỉnh trong Drupal 8, tôi nhớ chúng ta có thể chuyển hướng đến đường dẫn tùy chỉnh trong Drupal 7 với $form_state['redirect'] = 'mycustompath';trình xử lý trình tùy chỉnh, nhưng làm cách nào có thể chuyển hướng Người dùng sau khi gửi Biểu mẫu trong Drupal 8?

Tôi biết tôi nên sử dụng submitFormphương pháp:

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

Câu trả lời:


30

Trong phương thức "submitForm" của bạn, hãy viết mã bên dưới

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

nơi machine_namelà tên máy được đề cập trong tập tin định tuyến.

Tôi hi vọng cái này giúp được .. :)


không làm việc. Tôi thử tuyến đường tùy chỉnh của mình $form_state->setRedirect('/start');return;, giả sử tôi muốn chuyển hướng đến trang chủ. đoạn trích chính xác là gì?
Yusef

1
$ form_state-> setRedirect ('<front>'); trở về;
parth.k

nó không nên là '/ bắt đầu'. Đây là bí danh được đề cập trong tệp định tuyến.
parth.k

'<front>'làm việc những gì bạn về bí danh đường dẫn? đây là tuyến đường của tôitcdev.content: path: '/start' defaults: _controller: 'Drupal\tcdev\Controller\TrainingCenterController::content' _title: 'Start Training Center' requirements: _permission: 'access content'
Yusef

Nó phải là $ form_state-> setRedirect ('tcdev.content');
parth.k

8

Nếu bạn muốn đặt ở dạng xây dựng, bạn cần sử dụng một số đường dẫn định tuyến như.

use Drupal\Core\Url;

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

không gian tên của Url là gì? Url' not found
Yusef

nên use Drupal\Core\Url;(không có dấu gạch chéo trước)
ummdorian

$form_state->setRedirectUrl($url);cũng có thể được sử dụng trong submitForm ().
Shaun Dychko

Kiểm tra API: api.drupal.org/api/drupal/ . setRedirect () chỉ chuyển đổi tuyến thành URL trước sau đó gọi setRedirectUrl ().
imclean

0

Nếu bạn muốn chuyển hướng biểu mẫu chỉnh sửa của người dùng đến trang chủ hoặc trang khác, hãy làm theo mã bên dưới.

Đầu tiên, 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';
  } 
}

Sau khi thêm hook, thêm hàm bên dưới

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;
}

Tôi hy vọng sự giúp đỡ này.


Điều này không bỏ qua tất cả các trình xử lý trình nên bắn sau khi xử lý của bạn?
joeker

Bạn chỉ nên có $form_state->setRedirect()trong biểu mẫu gửi để tất cả các trình xử lý trình khác có thể được xử lý.
joeker
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.