ฉันกำลังมองหาวิธีจัดการกับ 404 บนรูปภาพใน Drupal ฉันได้สร้างสมาชิกหลายคน แต่ดูเหมือนจะไม่มีใครถูกกระตุ้น ความพยายามครั้งแรกของฉันคือการสร้างสมาชิกที่ขยายออกไป เส้นทางสมาชิกฐาน
. วิธีการ alterRoutes มีลักษณะดังนี้:
ฟังก์ชันที่ได้รับการป้องกัน alterRoutes (RouteCollection $collection) {
ถ้า ($route = $collection->get('system.404')) {
$route->setDefault('_controller', '\Drupal\my_module\Controller\ImageRouteController::load');
} อื่น {
(..)
}
}
ใช้งานได้ดีกับ 404 ทั้งหมด ยกเว้นรูปภาพ (ลงท้ายด้วย .jpg หรือ .png) สิ่งนี้จะยังคงสร้างหน้า 404 เริ่มต้น เป็นรุ่นที่มีน้ำหนักเบา ไม่เหมือนกับ 404 ในหน้าที่ไม่มีรูปภาพ เมื่อฉันดีบักผ่านโค้ด Drupal (เริ่มต้นที่ index.php) ฉันเห็นว่ามันต้องผ่านหลายขั้นตอนก่อนที่จะสร้าง light 404 นั้น ดังนั้นมันจึงไปถึงโค้ด Drupal
ฉันพบรหัสที่น่าสนใจอย่างหนึ่ง (ซึ่งเข้าถึงได้เมื่อไปที่รูปภาพที่ไม่มีอยู่):
$this->dispatcher->ส่ง (KernelEvents::EXCEPTION, $event);
นี้ได้ใน รับมือ
วิธีการ Symfony\Component\HttpKernel\HttpKernel
. ด้วยความรู้นั้นฉันจึงพบหน้านี้: https://www.drupal.org/node/2331613 . อีกครั้งดูเหมือนจะไม่ทำงาน สิ่งที่ฉันมีตอนนี้:
my_module.services.yml:
my_module.exception_image_subscriber:
คลาส: Drupal\my_module\EventSubscriber\ExceptionImageSubscriber
แท็ก:
- { ชื่อ: event_subscriber }
src\EventSubscriber\ExceptionImageSubscriber.php (ลบความคิดเห็น):
<?php
เนมสเปซ Drupal\my_module\EventSubscriber;
ใช้ Drupal\Core\EventSubscriber\HttpExceptionSubscriberBase;
ใช้ Symfony\Component\HttpFoundation\Response;
ใช้ Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent
class ExceptionImageSubscriber ขยาย HttpExceptionSubscriberBase {
/**
* {@inheritDoc}
*/
ฟังก์ชั่นที่ได้รับการป้องกัน getHandledFormats () {
กลับ ['svg','jpg','gif','png','webp'];
}
/**
* {@inheritdoc}
*/
ฟังก์ชันสแตติกที่ได้รับการป้องกัน getPriority () {
กลับ 0;
}
/**
* จัดการข้อผิดพลาด 404 สำหรับรูปภาพ
*/
ฟังก์ชั่นสาธารณะ on404 (GetResponseForExceptionEvent $event) {
dd('ทดสอบ'); // <- ไม่ยิง?!
}
}
ดูเหมือนจะไม่ทำอะไรเลย ไม่ใช่สำหรับภาพที่ไม่ใช่หรือสำหรับภาพ
ฉันเริ่มเชื่อว่าปัญหาคือโมดูลไม่โหลดเมื่อมีการร้องขออิมเมจ มีวิธีแก้ไขปัญหานี้หรือไม่?