Điểm:0

Cách trả lại Service Worker với tiêu đề HTTP tùy chỉnh từ mô-đun tùy chỉnh

lá cờ ng

Tôi có một mô-đun tùy chỉnh cung cấp tệp Công nhân dịch vụ HTML5 bên dưới /modules/custom/my_blocks/assets/js/service-worker.js. Vì Nhân viên dịch vụ không nằm trong thư mục gốc của máy chủ Drupal, tôi cần trả lại tệp có thêm Dịch vụ-Công nhân-Được phép tiêu đề HTTP.

Làm thế nào để làm điều đó trong mô-đun của tôi?

Jaypan avatar
lá cờ de
Đây không phải là vấn đề về Drupal. Tệp này là một tệp tĩnh, nó không được xử lý thông qua Drupal, vì vậy các tiêu đề HTTP cần được thêm thông qua máy chủ.
david avatar
lá cờ ng
Nhưng tôi có thể cung cấp tệp tĩnh một cách linh hoạt qua Drupal, phải không? Do đó nó cũng nên đánh chặn.
Jaypan avatar
lá cờ de
Ahh tôi hiểu rồi, Remi đã cung cấp câu trả lời về cách phục vụ nó thông qua Drupal. Điều đó nói rằng, tôi sẽ xem xét cách thực hiện điều này với `.htaccess` hoặc bất kỳ thứ gì, để Drupal không cần phải khởi động lại để phân phối tệp.
david avatar
lá cờ ng
`.htaccess` sẽ không hoạt động. Tôi cần tự động tạo nhân viên dịch vụ một/hoặc các tệp bộ đệm có liên quan, vì chúng cần được cập nhật khi nội dung trang web Drupal của tôi thay đổi.
Điểm:4
lá cờ vg

Để cung cấp tệp động, bạn cần tạo Bộ điều khiển với phương thức như:

 chức năng công cộng phục vụ(Yêu cầu $request) {
    $file_str = $file_system->realpath($module_handler->getModule('my_module')->getPath()) . '/assets/js/service-worker.js';

    nếu (file_exists($file_str)) {

      $response = new BinaryFileResponse($file_str, 200);
      $response->headers->set('Content-Type', 'application/javascript');
      // Cho phép cùng một nhân viên dịch vụ gốc.
      $response->headers->set('Service-Worker-Allowed', '/');

      trả lại phản hồi $;
    }

    ném NotFoundHttpException() mới;
  }

Và sau đó xác định tuyến đường cho nó, trong đó đường dẫn không tồn tại dưới dạng tệp tĩnh, như:

ví dụ.serviceworker:
  đường dẫn: '/ công nhân dịch vụ' 
  mặc định: 
    _controller: '\Drupal\my_module\Controller\ExampleController::serve' 
  yêu cầu: 
    _permission: 'truy cập nội dung' 

xem - https://www.drupal.org/docs/drupal-apis/routing-system/introductory-drupal-8-routes-and-controllers-example.

david avatar
lá cờ ng
Giải pháp rõ ràng và sạch sẽ tuyệt vời. Đó là những gì tôi đang tìm kiếm. Rất cảm ơn!
david avatar
lá cờ ng
Đã khắc phục một số sự cố nhỏ: Drupal không chặn tuyến đường "serviceworker.js", vì vậy tôi phải xóa tiện ích mở rộng. Mặt khác, tuyến "/ serviceworker" hoạt động như mong đợi.
lá cờ vg
np;) và cảm ơn bạn đã sửa mã;) Sau đó, bạn có thể đánh dấu câu trả lời là được chấp nhận không?

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.