Tôi đang tìm cách xử lý 404 trên hình ảnh trong Drupal. Tôi đã tạo một số người đăng ký, nhưng dường như không có người đăng ký nào được kích hoạt. Lần thử đầu tiên của tôi là tạo người đăng ký mở rộng Tuyến cơ sở thuê bao
. Phương thức alterRoutes trông giống như:
chức năng được bảo vệ alterRoutes(RouteCollection $collection) {
if ($route = $collection->get('system.404')) {
$route->setDefault('_controller', '\Drupal\my_module\Controller\ImageRouteController::load');
} khác {
(..)
}
}
Điều này hoạt động hoàn hảo cho tất cả 404 ngoại trừ hình ảnh (kết thúc bằng .jpg hoặc .png). Điều này vẫn sẽ tạo ra một trang 404 mặc định. Đây thực sự là một phiên bản nhẹ, không giống như 404 trên trang không tồn tại hình ảnh. Khi tôi gỡ lỗi thông qua mã Drupal (bắt đầu từ index.php), tôi thấy nó trải qua nhiều bước trước khi tạo ánh sáng 404 đó. Vì vậy, nó đạt đến mã Drupal.
Tôi đã tìm thấy một đoạn mã thú vị cụ thể (có được khi truy cập một hình ảnh không tồn tại):
$this->dispatcher->dispatch(KernelEvents::EXCEPTION, $event);
Điều này có thể được tìm thấy trong xử lý
phương pháp của Symfony\Thành phần\HttpKernel\HttpKernel
. Với kiến thức đó, tôi đã tìm được trang này: https://www.drupal.org/node/2331613 . Một lần nữa, nó dường như không hoạt động. Những gì tôi có bây giờ:
my_module.services.yml:
my_module.Exception_image_subscriber:
lớp: Drupal\my_module\EventSubscriber\ExceptionImageSubscriber
thẻ:
- { tên: event_subscriber }
src\EventSubscriber\ExceptionImageSubscriber.php (đã xóa nhận xét):
<?php
không gian tên Drupal\my_module\EventSubscriber;
sử dụng Drupal\Core\EventSubscriber\HttpExceptionSubscriberBase;
sử dụng Symfony\Thành phần\HttpFoundation\Response;
sử dụng Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent;
lớp ExceptionImageSubscriber mở rộng HttpExceptionSubscriberBase {
/**
* {@inheritDoc}
*/
chức năng được bảo vệ getHandledFormats() {
return ['svg','jpg','gif','png','webp'];
}
/**
* {@inheritdoc}
*/
hàm tĩnh được bảo vệ getPriority() {
trả về 0;
}
/**
* Xử lý lỗi 404 cho hình ảnh
*/
hàm công khai on404(GetResponseForExceptionEvent $event) {
đ('kiểm tra'); // <- không kích hoạt?!
}
}
Điều này dường như không làm bất cứ điều gì, không dành cho hình ảnh hoặc hình ảnh.
Tôi bắt đầu tin rằng vấn đề là các mô-đun không được tải khi hình ảnh được yêu cầu. Có cách nào xung quanh vấn đề này?