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


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.