Redirect setelah pengiriman formulir


15

Saya membuat Formulir kustom di Drupal 8, saya ingat kita bisa mengarahkan ulang ke jalur kustom di Drupal 7 dengan mengatur $form_state['redirect'] = 'mycustompath';custom handler penanganan, tetapi bagaimana cara mengarahkan Pengguna setelah pengiriman Formulir di Drupal 8?

Saya tahu saya harus menggunakan submitFormmetode:

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

Jawaban:


30

Dalam metode "submitForm" Anda, tulis kode di bawah ini

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

di mana machine_namenama mesin yang disebutkan dalam file routing.

Saya harap ini membantu .. :)


tidak bekerja. Saya mencoba rute kustom saya $form_state->setRedirect('/start');return;, misalkan saya ingin mengalihkan ke halaman rumah. apa potongan yang tepat?
— Yusef

1
$ form_state-> setRedirect ('<front>'); kembali;
— parth.k

seharusnya tidak menjadi '/ mulai'. Itu adalah alias yang disebutkan dalam file perutean.
— parth.k

'<front>'bekerja apa yang Anda tentang path alias? ini rute sayatcdev.content: path: '/start' defaults: _controller: 'Drupal\tcdev\Controller\TrainingCenterController::content' _title: 'Start Training Center' requirements: _permission: 'access content'
— Yusef

Seharusnya $ form_state-> setRedirect ('tcdev.content');
— parth.k

8

Jika Anda ingin mengatur di buildform Anda perlu menggunakan beberapa jalur perutean seperti.

use Drupal\Core\Url;

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

apa namespace dari Url? Url' not found
— Yusef

seharusnya use Drupal\Core\Url;(tanpa garis miring sebelumnya)
— ummdorian

$form_state->setRedirectUrl($url);juga dapat digunakan di submitForm ().
— Shaun Dychko

Periksa API: api.drupal.org/api/drupal/… . setRedirect () baru saja mengubah rute ke URL terlebih dahulu kemudian memanggil setRedirectUrl ().
— imclean

0

Jika Anda ingin mengarahkan ulang formulir edit pengguna ke halaman rumah atau halaman lain ikuti kode di bawah ini.

Pertama, 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';
  } 
}

setelah menambahkan kait tambahkan fungsi di bawah ini

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

Saya harap ini membantu.


Tidakkah ini mem-bypass semua pengirim yang menyerahkan yang seharusnya menembak setelah penangan Anda?
— joekers

Anda harus memiliki hanya $form_state->setRedirect()dalam formulir kirim sehingga semua penangan pengiriman lainnya dapat diproses.
— joekers
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.