प्रोग्राम को डिफ़ॉल्ट रूप से "पहुंच प्रतिबंधित" तक उपयोगकर्ताओं को पुनर्निर्देशित करें


12

मैं प्रोग्राम को डिफ़ॉल्ट रूप से "एक्सेस प्रतिबंधित" पृष्ठ पर अपने उपयोगकर्ताओं को रीडायरेक्ट करना चाहूंगा। मुझे पता है कि मुझे एक साधारण रीडायरेक्ट के लिए "रीडायरेक्टरेस्पोंस" ऑब्जेक्ट की आवश्यकता है, लेकिन मैं यहां "पेज" तक सीमित डिफ़ॉल्ट को कैसे निर्दिष्ट करूं?


1
आमतौर पर, एक "एक्सेस प्रतिबंधित" पृष्ठ 403 स्थिति कोड वापस करके निर्मित होता है, दूसरे पृष्ठ पर पुनर्निर्देशित नहीं होता है। क्या आपने कुछ इस तरह की कोशिश कीreturn new Response('', Response::HTTP_FORBIDDEN);
पियरे बाइल

जवाबों:


24

आप अपने कोड में किसी भी बिंदु पर एक अपवाद फेंक सकते हैं:

403:

throw new \Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException();

404:

throw new \Symfony\Component\HttpKernel\Exception\NotFoundHttpException();

इसके बाद अपवाद को DefaultExceptionHtmlSubscriber द्वारा पकड़ लिया जाता है और इसके लिए एक उपप्रकार /system/403या /system/404लौटा दिया जाता है, जिसे आप मूल साइट सेटिंग्स में कॉन्फ़िगर कर सकते हैं यदि आप एक सामान्य "एक्सेस अस्वीकृत" या "नहीं मिला" पृष्ठ प्रदर्शित करना चाहते हैं।

अन्य विकल्प इस बात पर निर्भर करते हैं कि कोड कहां रखा गया है:

  • नियंत्रक या प्रपत्र से 403 या 404 प्रतिसाद लौटाएं

  • यदि आप किसी ईवेंट सब्सक्राइबर में हैं, तो किसी ईवेंट में प्रतिक्रिया सेट करें।

आपको जो कभी नहीं करना चाहिए वह सीधे प्रतिक्रिया भेजना है। यह कोड को रोकता नहीं है और दो प्रतिक्रियाएँ पैदा करता है, एक आपने भेजा है और एक ड्रुपल कर्नेल द्वारा लौटाया गया है। इससे अप्रत्याशित व्यवहार होगा।


2

यह सही तरीका लगता है:

    $response = new RedirectResponse('/system/403');
    $event->setResponse($response);

2

सिस्टम की पहुंच से वंचित मार्ग से अपना रीडायरेक्ट बनाएँ।

$url = Url::fromRoute('system.403');
$response = new RedirectResponse($url->toString());

यह आपको Drupal के मानक पहुँच निषेध पृष्ठ पर ले जाता है। मार्ग को system.routing.ymlकोर में परिभाषित किया गया है।

शीर्ष उत्तर आपको एक टूटे हुए दिखने वाले ब्राउज़र पर आधारित पहुँच अस्वीकृत देगा, जो कि आप जो देख रहे हैं वह हो सकता है। यदि आप अपने Drupal UI को दिखाना चाहते हैं, तो उपरोक्त का उपयोग करें।


0

एक पृष्ठ से, आप उपयोग कर सकते हैं:

return new \Symfony\Component\HttpFoundation\RedirectResponse(\Drupal::url('your.module.route.name'));

जैसे: http://www.drupal8.ovh/en/tutoriels/88/page-redirection-on-dal-8

या सबमिट से:

$form_state->setRedirect('your.module.route.name');

फिर 'your.module.route.name' की एक्सेस अनुमति को कॉन्फ़िगर करें

यदि आपको पता नहीं है कि एक्सेस परमिट कैसे कॉन्फ़िगर करें, तो देखें: http://www.drupal8.ovh/en/tutoriels/66/create-a-custom-permission-drupal-8


मैंने $ प्रतिसाद देने की कोशिश की है = नई प्रतिक्रिया ('', प्रतिक्रिया :: HTTP_FORBIDDEN); $ घटना> setResponse ($ प्रतिक्रिया); यह उपयोगकर्ता को केवल एक सफेद पृष्ठ दिखाता है। यह बहुत कम जानकारी है। मैं ड्रुपल से डिफ़ॉल्ट "एक्सेस अस्वीकृत" पृष्ठ दिखाना चाहता हूं।
जेपस्टर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.