उपयोगकर्ताओं को किसी भिन्न पृष्ठ पर पुनर्निर्देशित करने के लिए मैं किस फ़ंक्शन / विधि का उपयोग कर सकता हूं?


12

Drupal 7 में, मैं निम्नलिखित कोड का उपयोग करता हूं।

function my_goto($path) { 
  drupal_goto($path, array(), 301);
}

Drupal 8 में मुझे किस कोड का उपयोग करना चाहिए?


3
drupal.org/node/2023537 drupal_goto () के लिए परिवर्तन रिकॉर्ड है, जब भी आप किसी विशिष्ट फ़ंक्शन के प्रतिस्थापन की तलाश में होते हैं, तो पहले वहां देखें।
बरदिर

जवाबों:


24

यह कोड है जिसे Drupal 8 में उपयोग किया जाना चाहिए । अधिक जानकारी के लिए परिवर्तन रिकॉर्ड देखें ।

use Symfony\Component\HttpFoundation\RedirectResponse;

function my_goto($path) { 
  $response = new RedirectResponse($path);
  $response->send();
  return;
}

6
जोड़ना मत भूलनाuse Symfony\Component\HttpFoundation\RedirectResponse;
मैट फ्लेचर

यह निम्न स्तर का HttpFoundation कोड है जो किसी सिम्फनी एप्लिकेशन में उपयुक्त नहीं है, symfony.com/doc/current/compenders/… देखें ।
user89751

8

अनु मैथ्यू की प्रतिक्रिया पर निर्माण करने के लिए ;

एक स्थिति कोड जोड़ने के लिए, RedirectResponse वर्ग में इसका दूसरा पैराम है;

use Symfony\Component\HttpFoundation\RedirectResponse;

function my_goto($path) { 
  $response = new RedirectResponse($path, 302);
  $response->send();
  return;
}

1
मेरे लिए यह केवल एक बार काम करने के लिए लगता है, और हर बार जब आप इसे फिर से काम करना चाहते हैं तो कैश को साफ करना होगा। क्या इसके आसपास कोई रास्ता है?
मैट


4

मैं drupal_gotoड्रुपल 8 में अभी तक काम नहीं किया था, लेकिन ड्रुपल 8 से प्रलेखन के अनुसार हटा दिया गया था।

के स्थान में drupal_gotoआप लिखने की जरूरत है:

return new RedirectResponse(\Drupal::url('route.name'));

और मापदंडों के साथ कुछ इस तरह:

return new RedirectResponse(\Drupal::url('route.name', [], ['absolute' => TRUE]));

यहां देखें https://www.drupal.org/node/2023537 और कक्षा पुनर्निर्देशन


आपके उत्तर के लिए धन्यवाद। लेकिन मैं वर्तमान url से मार्ग का नाम कैसे प्राप्त कर सकता हूं (क्योंकि url कॉन्फ़िगरेशन फ़ॉर्म का उपयोग कर रहा है)
Anu मैथ्यू

आपका मतलब है पुनर्निर्देशित पथ गतिशील है ???
सुमित मदन

हां, आपका अधिकार इसका गतिशील है ..
अनु मैथ्यू

ठीक है, \Drupal::url('route.name')अपने यूआरएल या शायद पूर्ण यूआरएल के साथ बदलने की कोशिश करें ।
सुमित मदन

नया पुनर्निर्देशन वापस करें ($ निरपेक्ष_र्ल); मेरे लिए काम किया जाता है :) लेकिन स्क्रीन पर इसका उदाहरण " redirect to example.com/absolute_url " संदेश दिखा रहा है
Anu Mathew

4

यह अंतर्निहित सिम्फनीज में उपयोग करके प्राप्त किया जा सकता है EventDispatcher घटक। आपको बस एक कस्टम मॉड्यूल बनाना है। अपनी services.yml फ़ाइल जोड़ें और उचित सेवा कॉन्फिगरेशन प्रदान करें।

services:
  mymodue.subscriber:
    class: Drupal\my_module\EventSubscriber
    tags:
      - { name: event_subscriber }

अपने मॉड्यूल src निर्देशिका में अपने EventSubscriber.php क्लास बनाएँ और यहाँ आप विधियों का वर्णन करें।

    <?php
       use Symfony\Component\HttpFoundation\RedirectResponse;

        public function checkForCustomRedirect(GetResponseEvent $event) {     
            $route_name = \Drupal::request()->attributes->get(RouteObjectInterface::ROUTE_NAME);
            if($route_name === 'module.testPage') {
              $event->setResponse(new RedirectResponse($url, $status = 302,$headers);
            }
         }

          /**
           * {@inheritdoc}
           */
        public static function getSubscribedEvents() {
            $events = [];
            $events[KernelEvents::REQUEST][] = array('checkForCustomRedirect');
            return $events;
        }

$ url परिभाषित नहीं है।
डैन शुमेकर

1

मेरे लिए बिल्कुल सही रीडायरेक्ट कोड निम्नलिखित है:

$response = new RedirectResponse($path);
return $response->send();

किसी भी अन्य मामलों में मुझे कुछ प्रकार के अपवाद या त्रुटियां मिल रही हैं, उदाहरण के लिए: LogicException: नियंत्रक को प्रतिसाद देना चाहिए ...

या

https://www.drupal.org/project/drupal/issues/2852657

वहां पहले से ही इसके बारे में एक चर्चा, उम्मीद है कि मदद करता है!


0

यह आंतरिक या बाहरी पुनर्निर्देशन के लिए काम करता है:

use Symfony\Component\HttpFoundation\RedirectResponse;
use Drupal\Core\Url;

   $url = Url::fromUri('internal:/node/27'); // choose a path
   // $url =  Url::fromUri('https://external_site.com/');
    $destination = $url->toString();
    $response = new RedirectResponse($destination, 301);
    $response->send();
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.