Score:0

ตำแหน่งที่จะกำหนดกฎการแคชเอนทิตีแบบกำหนดเองของหน้ารายละเอียด

ธง cn

เมื่อคุณมีโปรเจ็กต์ที่ใหญ่ขึ้น คุณอาจมีทั้งแคชเพจภายในที่เปิดใช้งานโมดูลแคชเพจไดนามิกภายใน ในกรณีของฉันฉันทำ แต่ฉันมีส่วนในเว็บไซต์ของฉันที่มีเอนทิตีแบบกำหนดเอง ('การแข่งขัน') ซึ่งฉันต้องการให้มีการควบคุมการแคชของหน้ารายละเอียดแบบกำหนดเอง (การแข่งขัน/1) นี่คือสิ่งที่ฉันพบจนถึงตอนนี้:

/**
 * ใช้ hook_entity_view_alter()
 * ปิดใช้งานการแคชในเอนทิตีการแข่งขันทุกประเภท
 */
ฟังก์ชัน mymodule_entity_view_alter (อาร์เรย์ &$build, Drupal\Core\Entity\EntityInterface $entity, \Drupal\Core\Entity\Display\EntityViewDisplayInterface $display) {
  $types = ['ประกวด'];
  ถ้า (in_array($entity->bundle(), $types)) {
    $build['#cache']['max-age'] = 0;
    \Drupal::service('page_cache_kill_switch')->ทริกเกอร์();
  }
}

นี่เป็นวิธีเดียวหรือไม่? ฉันคาดว่าจะมีวิธีที่สะอาดกว่านี้ในของฉัน Contest.php บางที? รอคอยคำตอบที่เป็นไปได้!

4uk4 avatar
cn flag
ไม่ชัดเจนว่าคุณกำลังถามอะไร Dynamic Page Cache เคารพ max-age = 0 ดังนั้นจึงไม่มีวิธีที่สะอาดกว่าในการปิดใช้งาน คุณหมายถึง [Internal Page Cache](https://www.drupal.org/docs/administering-a-drupal-site/internal-page-cache) ใช่ไหม เฉพาะในกรณีที่คุณเปิดใช้งานโมดูลนี้ คุณจะต้องใช้สวิตช์ฆ่าเพิ่มเติม หรือคุณหมายถึงส่วนหัวการตอบสนองเพื่อควบคุมแคชของเบราว์เซอร์
Stef Van Looveren avatar
cn flag
ขอบคุณสำหรับการตอบกลับ ขออภัย ฉันหมายถึงทั้งแคชของเพจภายในเป็น Internal Dynamic Page Cache ลองพิจารณาทั้งสองโมดูลที่จะเปิดใช้งาน ฉันแค่สงสัยว่ามีวิธี OO เพิ่มเติมในการกำหนดแคชของหน้ารายละเอียดเอนทิตีที่กำหนดเองหรือไม่
4uk4 avatar
cn flag
มีหลายอย่างที่ไม่ชัดเจน รหัสของคุณกำลังตรวจสอบชุดข้อมูล แต่ดูเหมือนว่าคุณต้องการตรวจสอบ `getEntityTypeId()` หากเป็นกรณีนี้ คุณสามารถเพิ่มตัวเลือก `no_cache: TRUE` ให้กับเส้นทางเอนทิตี (route_provider ในคลาสเอนทิตีของคุณ **การแข่งขัน**)
Stef Van Looveren avatar
cn flag
คำตอบที่ถูกต้องด้านล่างคือสิ่งที่ฉันกำลังมองหา ขอบคุณ.
Score:2
ธง cn

ฉันแค่สงสัยว่ามีวิธี OO เพิ่มเติมในการกำหนดแคชหรือไม่ ของหน้ารายละเอียดเอนทิตีแบบกำหนดเอง

นี่จะเป็นการขยายผู้ให้บริการเส้นทางที่คุณกำลังใช้อยู่ (DefaultHtmlRouteProvider หรือ AdminHtmlRouteProvider) โดยระบุในคลาสเอนทิตีที่กำหนดเอง

* "route_provider" = {
* "html" = "Drupal\mymodule\MyEntityRouteProvider",
* },

และการเอาชนะ รับ CanonicalRoute ในการเพิ่มตัวเลือก no_cache:

ฟังก์ชันที่ได้รับการป้องกัน getCanonicalRoute (EntityTypeInterface $entity_type) {
  $route = parent::getCanonicalRoute($entity_type);
  $route->setOption('no_cache', TRUE);
  กลับ $route;
}
Stef Van Looveren avatar
cn flag
ยอดเยี่ยม. ฉันไม่รู้สิ่งนี้ ขอบคุณ.

โพสต์คำตอบ

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