ฉันต้องการเปลี่ยนเส้นทางผู้ใช้ของฉันไปยังหน้าเริ่มต้น "จำกัด การเข้าถึง" โดยทางโปรแกรม ฉันรู้ว่าฉันต้องการวัตถุ "RedirectResponse" สำหรับการเปลี่ยนเส้นทางอย่างง่าย แต่ฉันจะระบุหน้า "การ จำกัด การเข้าถึง" เริ่มต้นได้ที่นี่ได้อย่างไร
ฉันต้องการเปลี่ยนเส้นทางผู้ใช้ของฉันไปยังหน้าเริ่มต้น "จำกัด การเข้าถึง" โดยทางโปรแกรม ฉันรู้ว่าฉันต้องการวัตถุ "RedirectResponse" สำหรับการเปลี่ยนเส้นทางอย่างง่าย แต่ฉันจะระบุหน้า "การ จำกัด การเข้าถึง" เริ่มต้นได้ที่นี่ได้อย่างไร
คำตอบ:
คุณสามารถโยนข้อยกเว้น ณ จุดใดก็ได้ในรหัสของคุณ:
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 สิ่งนี้จะทำให้เกิดพฤติกรรมที่คาดเดาไม่ได้
นี่เป็นวิธีที่ถูกต้อง:
$response = new RedirectResponse('/system/403');
$event->setResponse($response);
สร้างการเปลี่ยนเส้นทางของคุณจากเส้นทางที่ถูกปฏิเสธการเข้าถึงของระบบ
$url = Url::fromRoute('system.403');
$response = new RedirectResponse($url->toString());
นี่จะนำคุณไปสู่หน้าปฏิเสธการเข้าถึงมาตรฐานของ Drupal เส้นทางถูกกำหนดเป็นsystem.routing.yml
หลัก
คำตอบยอดนิยมจะให้ Access Denied ที่เบราว์เซอร์ที่ใช้งานไม่ได้ซึ่งอาจเป็นสิ่งที่คุณกำลังมองหา หากคุณต้องการให้ Drupal UI ของคุณแสดงขึ้นให้ใช้ข้างต้น
จากหน้าคุณสามารถใช้:
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
return new Response('', Response::HTTP_FORBIDDEN);