Score:0

วิธีส่งคืน Service Worker ด้วยส่วนหัว HTTP ที่กำหนดเองจากโมดูลที่กำหนดเอง

ธง ng

ฉันมีโมดูลที่กำหนดเองซึ่งมีไฟล์ HTML5 Service Worker ภายใต้ /modules/custom/my_blocks/assets/js/service-worker.js. เนื่องจาก Service Worker ไม่ได้อยู่ในรูทของเซิร์ฟเวอร์ Drupal ฉันจึงต้องส่งคืนไฟล์พร้อมกับไฟล์เพิ่มเติม อนุญาตพนักงานบริการ ส่วนหัว HTTP

จะทำอย่างไรในโมดูลของฉัน

Jaypan avatar
de flag
นี่ไม่ใช่ปัญหาของ Drupal ไฟล์นี้เป็นไฟล์แบบสแตติก ไม่ได้รับการประมวลผลผ่าน Drupal ดังนั้นจึงจำเป็นต้องเพิ่มส่วนหัว HTTP ผ่านเซิร์ฟเวอร์
david avatar
ng flag
แต่ฉันสามารถให้ไฟล์คงที่แบบไดนามิกผ่าน Drupal ใช่ไหม ดังนั้นจึงควรสกัดกั้นด้วย
Jaypan avatar
de flag
อ่า เข้าใจแล้ว Remi ให้คำตอบเกี่ยวกับวิธีให้บริการผ่าน Drupal ที่กล่าวว่าฉันจะดูวิธีการทำสิ่งนี้ด้วย `.htaccess `หรืออะไรก็ตาม เพื่อให้ Drupal ไม่จำเป็นต้องบูทสแตรปเพื่อให้บริการไฟล์
david avatar
ng flag
`.htaccess` จะไม่ทำงาน ฉันจำเป็นต้องสร้างพนักงานบริการและ/หรือไฟล์แคชที่เกี่ยวข้องแบบไดนามิก เนื่องจากจำเป็นต้องอัปเดตเมื่อเนื้อหาของไซต์ Drupal ของฉันเปลี่ยนไป
Score:4
ธง vg

ในการจัดเตรียมไฟล์ไดนามิก คุณต้องสร้างคอนโทรลเลอร์ด้วยวิธีต่อไปนี้:

 บริการฟังก์ชั่นสาธารณะ (ขอ $ คำขอ) {
    $file_str = $file_system->realpath($module_handler->getModule('my_module')->getPath()) '/assets/js/service-worker.js';

    ถ้า (file_exists ($ file_str)) {

      $response = ใหม่ BinaryFileResponse($file_str, 200);
      $response->headers->set('Content-Type', 'application/javascript');
      // อนุญาตพนักงานบริการต้นทางเดียวกัน
      $response->headers->set('Service-Worker-Allowed', '/');

      ส่งคืน $response;
    }

    โยนใหม่ NotFoundHttpException();
  }

จากนั้นกำหนดเส้นทางสำหรับมัน โดยที่เส้นทางนั้นไม่มีอยู่เป็นไฟล์สแตติก เช่น:

ตัวอย่าง พนักงานบริการ:
  เส้นทาง: '/ พนักงานบริการ' 
  ค่าเริ่มต้น: 
    _controller: '\Drupal\my_module\Controller\ExampleController::serve' 
  ความต้องการ: 
    _permission: 'เข้าถึงเนื้อหา' 

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

david avatar
ng flag
โซลูชันที่ชัดเจนและสะอาดดีเยี่ยม นั่นคือสิ่งที่ฉันกำลังมองหา ขอบคุณมาก!
david avatar
ng flag
แก้ไขปัญหาเล็กน้อย: Drupal ไม่สกัดกั้นเส้นทาง "serviceworker.js" ดังนั้นฉันจึงต้องลบส่วนขยายออก ในทางกลับกัน เส้นทาง "/serviceworker" ทำงานได้ตามปกติ
vg flag
np ;) และขอบคุณสำหรับการแก้ไขโค้ด ;) คุณช่วยทำเครื่องหมายคำตอบว่ายอมรับได้ไหม pls

โพสต์คำตอบ

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