প্রোগ্রামিয়ালি ব্যবহারকারীদের ডিফল্ট "অ্যাক্সেস সীমাবদ্ধ" এ পুনঃনির্দেশ করুন


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();

ব্যতিক্রমটি পরে ডিফল্ট এক্সসেপশনএইচটিএমএল সাবস্ক্রাইবার দ্বারা ক্যাচ করা হয় এবং এর জন্য একটি সাবক্রিওয়েস্ট ফিরে আসে /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());

এটি আপনাকে ড্রুপাল স্ট্যান্ডার্ড অ্যাক্সেস অস্বীকৃত পৃষ্ঠাতে নিয়ে যায়। রুটটি মূল হিসাবে সংজ্ঞায়িত করা system.routing.ymlহয়েছে।

শীর্ষের উত্তরটি আপনাকে একটি ভাঙ্গা চেহারা ব্রাউজার ভিত্তিক অ্যাক্সেস অস্বীকার করবে, যা আপনি যা খুঁজছেন তা হতে পারে। আপনি যদি আপনার ড্রুপাল ইউআই প্রদর্শন করতে চান তবে উপরেরটি ব্যবহার করুন।


0

একটি পৃষ্ঠা থেকে, আপনি ব্যবহার করতে পারেন:

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

পছন্দ: http://www.drupal8.ovh/en/tutoriels/88/page-redirection-on-drupal-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); $ event-> setResponse ($ প্রতিক্রিয়া); এটি ব্যবহারকারীকে কেবল একটি সাদা পৃষ্ঠা দেখায়। এটি খুব কম তথ্য। আমি দ্রুপাল থেকে ডিফল্ট "অ্যাক্সেস অস্বীকৃত" পৃষ্ঠাটি দেখাতে চাই।
জেপস্টার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.