फॉर्म सबमिट करने के बाद रीडायरेक्ट करें


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;आज़माता हूं, मान लीजिए कि मैं होम पेज पर रीडायरेक्ट करना चाहता हूं। सटीक स्निपेट क्या है?
— युसेफ

1
$ form_state-> setRedirect ( '<सामने>'); वापसी;
— parth.k

यह 'शुरू नहीं' होना चाहिए। यह रूटिंग फ़ाइल में उल्लिखित उपनाम है।
— parth.k

'<front>'काम किया आपने पथ उर्फ ​​के बारे में क्या कहा? यह मेरा मार्ग हैtcdev.content: path: '/start' defaults: _controller: 'Drupal\tcdev\Controller\TrainingCenterController::content' _title: 'Start Training Center' requirements: _permission: 'access content'
— युसेफ

यह $ form_state-> setRedirect ('tcdev.content') होना चाहिए;
— parth.k

8

यदि आप बिल्डफ़ॉर्म पर सेट करना चाहते हैं, तो आपको कुछ रूटिंग पथ का उपयोग करने की आवश्यकता है।

use Drupal\Core\Url;

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

Url का नाम स्थान क्या है? Url' not found
— युसेफ

होना चाहिए use Drupal\Core\Url;(पूर्ववर्ती स्लेश के बिना)
— ummdorian

$form_state->setRedirectUrl($url);submitForm () में भी इस्तेमाल किया जा सकता है।
— शॉन डिकको

एपीआई की जाँच करें: api.drupal.org/api/drupal/… । setRedirect () बस रूट को पहले URL में परिवर्तित करता है फिर setRedirectUrl () को कॉल करता है।
— imclean

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()फॉर्म सबमिट होना चाहिए ताकि अन्य सभी सबमिट हैंडलर संसाधित किए जा सकें।
— जोकर 14
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.