Score:2

การแคช ID โหนดบน hook_form_alter()

ธง in

ฉันมีเว็บฟอร์มพร้อมฟิลด์อีเมล ฉันกำลังฝังเว็บฟอร์มในแต่ละโหนด โดยมีฟิลด์บนโหนดสำหรับที่อยู่อีเมล

ฉันดำเนินการ hook_form_alter() ในไฟล์ .theme ของฉันที่โหลดโหนดโดยใช้ $node = \Drupal::routeMatch()->getParameter('โหนด');.

จากนั้นฉันสามารถโหลดโหนดและรับที่อยู่อีเมลที่ถูกต้องและตั้งค่าในเว็บฟอร์ม ปัญหาคือโหนดถูกแคชสำหรับผู้ใช้ที่ไม่ระบุตัวตน ไม่สำคัญว่าฉันจะอยู่บนโหนดใด $node->id() ส่งคืน ID โหนดที่แคชไว้เหมือนกันเสมอ

ฉันลองทั้งสองบรรทัดแล้ว แต่ ID โหนดยังคงเหมือนเดิม

\Drupal::service('page_cache_kill_switch')->ทริกเกอร์();
$vars['#cache']['max-age'] = 0;

ฉันเข้าใจว่าฉันต้องล้างแท็กแคชและบริบทของแคช แต่ไม่มีตัวอย่างใดที่แสดงวิธีการทำเช่นนี้อย่างชัดเจน hook_form_alter().

ฉันจะล้างแคชอย่างถูกต้องได้อย่างไร

Score:5
ธง cn

เมื่อคุณได้รับพารามิเตอร์เส้นทาง คุณต้องมีบริบทแคชนี้:

$form['#cache']['contexts'][] = 'เส้นทาง';

นอกจากนี้ คุณอาจต้องการเพิ่มข้อมูลแคชของโหนดเพื่อให้ฟอร์มใช้ไม่ได้เมื่อบันทึกโหนดด้วยค่าฟิลด์อื่น:

$renderer = \Drupal::service('เรนเดอร์');
$renderer->addCacheableDependency($form, $node);

บริบทของแคชถูกนำไปใช้กับฟอร์มและองค์ประกอบของหน้าทั้งหมดที่วางฟอร์ม ดังนั้นสิ่งนี้จึงใช้ได้ไม่ว่าคุณจะฝังฟอร์มไว้ที่ใด

หากฟอร์มถูกฝังอยู่ภายในโหนด การรับโหนดจากการจับคู่เส้นทางอาจไม่ใช่แนวคิดที่ดีที่สุด คุณควรใช้โหนดหรือรหัสโหนดเป็นพารามิเตอร์เมื่อเรียกฟอร์ม จากนั้นคุณสามารถลองคำตอบจาก @sonfd ได้ เพราะคุณไม่จำเป็นต้องมีคีย์แคชแยกต่างหากสำหรับโหนดและเว็บฟอร์ม

in flag
นี่คือสิ่งที่ทำ ขอบคุณมาก!! $form['#cache']['contexts'][] = 'เส้นทาง';
Score:3
ธง in

ปัญหาคือเว็บฟอร์มได้รับการแคชด้วยข้อมูลโหนด $ จากโหนดแรกที่เข้าชม แต่คุณต้องการให้เว็บฟอร์มไม่ซ้ำกันต่อโหนด

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

ในของคุณ hook_form_FORM_ID_alter() (ที่คุณใช้เพื่อตั้งค่าที่อยู่อีเมล) คุณสามารถยกเลิกการตั้งค่าคีย์แคช เช่น:

ถ้า (isset($form['#cache']['keys']) {
  unset($form['#cache']['keys']);
}

โพสต์คำตอบ

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