เปลี่ยนเส้นทางผู้ใช้โดยทางโปรแกรมไปที่“ การ จำกัด การเข้าถึง” โดยค่าเริ่มต้น


12

ฉันต้องการเปลี่ยนเส้นทางผู้ใช้ของฉันไปยังหน้าเริ่มต้น "จำกัด การเข้าถึง" โดยทางโปรแกรม ฉันรู้ว่าฉันต้องการวัตถุ "RedirectResponse" สำหรับการเปลี่ยนเส้นทางอย่างง่าย แต่ฉันจะระบุหน้า "การ จำกัด การเข้าถึง" เริ่มต้นได้ที่นี่ได้อย่างไร


1
โดยปกติแล้วหน้า "จำกัด การเข้าถึง" จะถูกสร้างขึ้นโดยส่งคืนรหัสสถานะ 403 ไม่ใช่เปลี่ยนเส้นทางไปยังหน้าอื่น คุณลองทำสิ่งที่ชอบreturn new Response('', Response::HTTP_FORBIDDEN);
Pierre Buyle

คำตอบ:


24

คุณสามารถโยนข้อยกเว้น ณ จุดใดก็ได้ในรหัสของคุณ:

403:

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

404:

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

ข้อยกเว้นจะถูกตรวจพบโดย DefaultExceptionHtmlSubscriber และ subrequest สำหรับ/system/403หรือ/system/404ส่งคืนซึ่งคุณสามารถกำหนดค่าในการตั้งค่าไซต์พื้นฐานหากคุณไม่ต้องการแสดงหน้า "การเข้าถึงถูกปฏิเสธ" หรือ "ไม่พบ" ทั่วไป

ตัวเลือกอื่น ๆ ขึ้นอยู่กับตำแหน่งที่วางรหัส:

  • ส่งคืนการตอบกลับ 403 หรือ 404 จากคอนโทรลเลอร์หรือฟอร์ม

  • ตั้งค่าการตอบสนองในเหตุการณ์ถ้าคุณอยู่ในสมาชิกเหตุการณ์

สิ่งที่คุณไม่ควรทำคือส่งคำตอบโดยตรง สิ่งนี้จะไม่หยุดโค้ดและสร้างการตอบกลับสองรายการหนึ่งรายการที่คุณส่งไปและอีกหนึ่งรายการส่งคืนโดยเคอร์เนล Drupal สิ่งนี้จะทำให้เกิดพฤติกรรมที่คาดเดาไม่ได้



2

สร้างการเปลี่ยนเส้นทางของคุณจากเส้นทางที่ถูกปฏิเสธการเข้าถึงของระบบ

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

นี่จะนำคุณไปสู่หน้าปฏิเสธการเข้าถึงมาตรฐานของ Drupal เส้นทางถูกกำหนดเป็นsystem.routing.ymlหลัก

คำตอบยอดนิยมจะให้ Access Denied ที่เบราว์เซอร์ที่ใช้งานไม่ได้ซึ่งอาจเป็นสิ่งที่คุณกำลังมองหา หากคุณต้องการให้ 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-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


ฉันลองใช้ $ response = new Response ('', Response :: HTTP_FORBIDDEN); $ เลี้ยงที่นี่เรา> setResponse ($ ตอบสนอง); แสดงหน้าขาวให้ผู้ใช้เห็น นั่นเป็นข้อมูลที่น้อยเกินไป ฉันต้องการแสดงหน้า "การเข้าถึงถูกปฏิเสธ" เริ่มต้นจาก Drupal
jepster
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.