Puncte:0

Cum să returnați Service Worker cu antetul HTTP personalizat din modulul personalizat

drapel ng

Am un modul personalizat care oferă un fișier HTML5 Service Worker sub /modules/custom/my_blocks/assets/js/service-worker.js. Deoarece Service Worker nu se află în rădăcina serverului Drupal, trebuie să returnez fișierul cu un suplimentar Serviciu-Lucrător-Permis Antet HTTP.

Cum să fac asta în modulul meu?

Jaypan avatar
drapel de
Aceasta nu este o problemă Drupal. Fișierul este un fișier static, nu este procesat prin Drupal, așa că anteturile HTTP trebuie adăugate prin server.
david avatar
drapel ng
Dar aș putea furniza fișierul static în mod dinamic prin Drupal, nu? Prin urmare, ar trebui să fie și interceptabil.
Jaypan avatar
drapel de
Ahh am înțeles, Remi a oferit răspunsul despre cum să-l servesc prin Drupal. Acestea fiind spuse, m-aș uita la cum să fac asta cu `.htaccess` sau orice altceva, astfel încât Drupal să nu fie nevoie de bootstrap pentru a servi fișierul.
david avatar
drapel ng
`.htaccess` nu ar funcționa. Trebuie să creez dinamic serviciul de lucru și/sau fișierele cache aferente, deoarece acestea trebuie actualizate pe măsură ce se modifică conținutul site-ului meu Drupal.
Puncte:4
drapel vg

Pentru a furniza un fișier dinamic, trebuie să creați un controler cu o metodă ca:

 public function serve(Solicitare $cerere) {
    $file_str = $file_system->realpath($module_handler->getModule('my_module')->getPath()) . „/assets/js/service-worker.js”;

    dacă (fișier_există($file_str)) {

      $răspuns = nou BinaryFileResponse($file_str, 200);
      $response->headers->set('Content-Type', 'application/javascript');
      // Permite lucrătorului serviciului de aceeași origine.
      $response->headers->set('Service-Worker-Allowed', '/');

      returnează $răspuns;
    }

    arunca nou NotFoundHttpException();
  }

Și apoi definiți o rută pentru aceasta, unde calea nu există ca fișier static, cum ar fi:

exemplu.serviciu:
  cale: „/serviciu” 
  implicite: 
    _controller: „\Drupal\my_module\Controller\ExampleController::serve” 
  cerinte: 
    _permission: „accesează conținut” 

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

david avatar
drapel ng
Soluție excelentă limpede și curată. Asta cautam. Multumesc!
david avatar
drapel ng
S-a rezolvat o mică problemă: Drupal nu interceptează ruta „serviceworker.js”, așa că a trebuit să elimin extensia. Pe de altă parte, ruta „/serviceworker” funcționează conform așteptărilor.
drapel vg
np ;) și mulțumesc pentru remedierea codului ;) Ați putea apoi să marcați răspunsul ca fiind acceptat, pls?

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.