Score:1

Ajax form inside custom system.404 route controller doesn't work

ธง in

I need to display custom logic in 404 pages so I have overridden the route controller of the system.404 route like this:

class RouteSubscriber extends RouteSubscriberBase {

  protected function alterRoutes(RouteCollection $collection) {
    if ($route = $collection->get('system.404')) {
      $route->setDefault('_controller', '\Drupal\mymodule\Controller\myController::on404');
    }
  }
}

So let's say I am currently at the path /non-existing-path and the on404 callback renders my custom content just fine. Problem is I am also rendering a form that contains an Ajax element (a button), which doesn't work because apparently the Ajax request is made towards the following path:

/system/404?q=non-existing-path&destination=non-existing-path&_exception_statuscode=404&ajax_form=1&_wrapper_format=drupal_ajax

which, not unexpectedly, returns a Status Code: 404 Not Found

What am I missing?

--

So far I've tried intercepting the NotFoundHttpException with my own listener and changing it to a HttpException(200) in hopes I could turn a 404 page into a 200 but I am at a loss after that and it seems like an overkill.

4uk4 avatar
cn flag
หากคุณต้องการลองเปลี่ยน 404 เป็น 200 ให้ตั้งค่าการตอบสนองการเปลี่ยนเส้นทางในฟังเหตุการณ์
Chris Roditis avatar
in flag
ขอบคุณ แต่สิ่งนี้จะนำฉันไปยังเส้นทางอื่น ฉันต้องการอยู่ที่เส้นทางปัจจุบัน (ซึ่งไม่มีอยู่จริง) และแสดงเนื้อหาของฉันพร้อมกับแบบฟอร์ม ajax
4uk4 avatar
cn flag
ตกลง ฉันอ่านประโยคสุดท้ายของคุณผิด เกี่ยวกับหัวข้อหลัก `/system/404` ไม่ส่งคืนรหัสสถานะ 404 เมื่อใช้นอกข้อยกเว้น ส่งคืนเนื้อหาของ system.404 ในการตอบสนอง 200 และทำงานร่วมกับ Ajax เพิ่งทดสอบโดยตั้งค่าแบบฟอร์มเป็นเนื้อหา 404
Chris Roditis avatar
in flag
ขอบคุณที่ตรวจสอบ แต่เพื่อให้ชัดเจนยิ่งขึ้น ฉันกำลังพยายามแสดงฟอร์ม (โดยมีปุ่ม ajax อยู่ในนั้น) ในหน้า 404 เริ่มต้น ดังนั้นเมื่อใดก็ตามที่มีคนเข้าชมเพจที่ไม่มีอยู่จริง ข้อความ "ไม่พบเพจ" จะปรากฏขึ้นและอยู่ใต้แบบฟอร์ม ปัญหาคือปุ่ม ajax ไม่ทำงาน
4uk4 avatar
cn flag
ตามที่อธิบายไว้ ฉันไม่สามารถทำให้เกิดปัญหาซ้ำได้ เส้นทาง system/404 ส่งคืน 200 (ไม่ใช่ 404 ตามที่คุณกล่าวถึง) และการดำเนินการ Ajax บนเส้นทางนี้ทำงานโดยไม่มีปัญหาในการทดสอบของฉันด้วยสองรูปแบบที่แตกต่างกัน แบบฟอร์มที่กำหนดเองและแบบฟอร์มหลัก (แบบฟอร์มแก้ไขโหนด)
Chris Roditis avatar
in flag
เส้นทางที่ฉันเกี่ยวข้องไม่ใช่ system/404 แต่เป็นเส้นทางที่ไม่มีอยู่จริงแบบสุ่มดังนั้นฉันจึงกังวลกับการเรียกเส้นทาง 'system.404' *ภายใน* ข้อยกเว้น NotFoundHttpException ไม่ใช่ภายนอก เฉพาะเมื่อโยน 404 Not found เท่านั้น
4uk4 avatar
cn flag
ฉันได้วางแบบทดสอบทั้งสองแบบใน 404 ของเส้นทางที่ไม่มีอยู่จริงแบบสุ่มเช่นกัน สาเหตุของความกังวลคือคำขอที่ตามมาสำหรับ system/404 ซึ่งในกรณีของฉันส่งคืนรหัสสถานะ 200 และในกรณีของคุณ รหัสสถานะ 404 ซึ่งฉันไม่สามารถทำซ้ำได้
Score:0
ธง cn

รูปแบบ Ajax ภายในตัวควบคุมเส้นทาง system.404 แบบกำหนดเองไม่ทำงาน

ตัวอย่างเช่น โหนดฟอร์มที่ส่งคืนจากคอนโทรลเลอร์:

<?php

เนมสเปซ Drupal\mymodule\Controller;    

ใช้ Drupal\node\Entity\Node;

คลาส MyController ขยาย ControllerBase {

  ฟังก์ชั่นสาธารณะ on404() {
    $node = Node::create(['type' => 'บทความ']);
    ส่งคืน $this->entityFormBuilder()->getForm($node);
  }

}

รูปแบบโหนดทำงานได้อย่างสมบูรณ์ รวมถึงการดำเนินการ Ajax ที่ซับซ้อน เช่น การเปิดเบราว์เซอร์สื่อ

รหัสสถานะ 404 หรือ 200

ปัญหาคือฉันกำลังแสดงฟอร์มที่มีองค์ประกอบ Ajax (ก ปุ่ม) ซึ่งใช้ไม่ได้เพราะเห็นได้ชัดว่าคำขอ Ajax คือ ทำไปตามทางดังนี้

/system/404?q=non-existing-path&destination=non-existing-path&_exception_statuscode=404&ajax_form=1&_wrapper_format=drupal_ajax

ซึ่งจะส่งคืนรหัสสถานะ: 404 ไม่พบโดยไม่คาดคิด

นี้ไม่เป็นความจริงขอ /ระบบ/404 ส่งคืนรหัสสถานะ 200 เมื่อเรียกนอกตัวจัดการข้อยกเว้น เช่น ในคำขอ ajax เดอะ system.404 เส้นทางเป็นเส้นทางปกติที่ดำเนินการโดยตัวจัดการข้อยกเว้นในคำขอย่อย สถานะ 404 จะถูกเพิ่มในภายหลังและไม่ได้เป็นส่วนหนึ่งของเส้นทางนี้

Chris Roditis avatar
in flag
"เส้นทาง system.404 เป็นเส้นทางปกติซึ่งดำเนินการโดยตัวจัดการข้อยกเว้นในคำขอย่อย" สิ่งนี้ช่วยชี้ให้ฉันไปในทิศทางที่ถูกต้อง ขอบคุณสำหรับความช่วยเหลือทั้งหมด!

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา