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.