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
}
Yusef
sumber

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 .. :)

parth.k
sumber
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);
vgoradiya
sumber
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.

pemalu
sumber
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