เปลี่ยนเส้นทางหลังจากส่งแบบฟอร์ม


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;ลองสมมุติว่าฉันต้องการเปลี่ยนเส้นทางไปที่หน้าแรก ข้อมูลโค้ดที่แน่นอนคืออะไร
Yusef

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'
Yusef

ควรเป็น $ 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
Yusef

ควรเป็นuse Drupal\Core\Url;(ไม่มีเครื่องหมายทับก่อนหน้า)
ummdorian

$form_state->setRedirectUrl($url);สามารถใช้ใน submitForm ()
Shaun Dychko

ตรวจสอบ API: api.drupal.org/api/drupal/... setRedirect () เพียงแค่เปลี่ยนเส้นทางไปยัง URL ก่อนแล้วจึงเรียก setRedirectUrl ()
สะอาด

0

หากคุณต้องการเปลี่ยนเส้นทางแก้ไขฟอร์มของผู้ใช้ไปที่หน้าบ้านหรือหน้าอื่น ๆ ตามรหัสด้านล่าง

ก่อนอื่นเพิ่มเบ็ด - 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;
}

ฉันหวังว่าความช่วยเหลือนี้


สิ่งนี้ไม่ข้ามตัวจัดการการส่งทั้งหมดที่ควรทำงานหลังจากตัวจัดการของคุณหรือไม่
joekers

คุณควรมีเฉพาะ$form_state->setRedirect()ในแบบฟอร์มการส่งเพื่อให้ตัวจัดการการส่งอื่น ๆ ทั้งหมดสามารถประมวลผลได้
joekers
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.