ฉันกำลังมองหาวิธีจัดการกับ 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('ทดสอบ'); // <- ไม่ยิง?!
  }
}
ดูเหมือนจะไม่ทำอะไรเลย ไม่ใช่สำหรับภาพที่ไม่ใช่หรือสำหรับภาพ
ฉันเริ่มเชื่อว่าปัญหาคือโมดูลไม่โหลดเมื่อมีการร้องขออิมเมจ มีวิธีแก้ไขปัญหานี้หรือไม่?