ฉันต้องการแสดงแบบฟอร์มลงทะเบียนในรูปแบบโมดอล
ด้วยเหตุนี้ ฉันจึงสร้างบล็อกปลั๊กอินแบบกำหนดเองซึ่งส่งคืนการเรนเดอร์ของฟอร์มรีจิสเตอร์
/**
* {@inheritdoc}
*/
สร้างฟังก์ชั่นสาธารณะ () {
$entity = \Drupal::entityTypeManager()->getStorage('user')->create(array());
$formObject = \Drupal::entityTypeManager()
->getFormObject('ผู้ใช้', 'ลงทะเบียน')
->setEntity($เอนทิตี);
ส่งคืน $this->formBuilder->getForm($formObject);
}
/**
* {@inheritdoc}
*/
ฟังก์ชั่นป้องกัน blockAccess (AccountInterface $account) {
ถ้า ($account->isAnonymous()) {
กลับ AccessResult::allowed()
->addCacheContexts(['route.name', 'user.roles:anonymous']);
}
กลับ AccessResult::forbidden();
}
ฉันใช้คำสั่ง ajax สำหรับกระบวนการแสดงผลแบบโมดอล และในนั้นฉันมีรหัสนี้:
// สร้างอินสแตนซ์ของบล็อก
$plugin_block = $this->blockManager->createInstance($block_id);
// บางบล็อกอาจใช้การตรวจสอบการเข้าถึง
$access_result = $plugin_block->การเข้าถึง($this->currentUser);
// ส่งคืนอาร์เรย์เรนเดอร์ที่ว่างเปล่าหากผู้ใช้ไม่มีสิทธิ์เข้าถึง
// $access_result อาจเป็นบูลีนหรือคลาส AccessResult ก็ได้
ถ้า (is_object($access_result) && $access_result->isForbidden() || is_bool($access_result) && !$access_result) {
$modal_content = "";
}
อื่น {
$build_block = $plugin_block->build();
$modal_content = $this->renderer->render($build_block);
}
ปัญหาของฉันคือบล็อกนั้นแสดงผลได้ดีในโมดอลด้วยแบบฟอร์ม แต่ฟอร์มใช้ไม่ได้. และเมื่อฉันทำการเปรียบเทียบกับการแสดงผลปกติของบล็อก (เช่น โดยตรงในพื้นที่ของหน้าผ่านเค้าโครงบล็อกของผู้ดูแลระบบ) ความแตกต่างก็คือในการแสดงผลแบบโมดอล ฉันมี การดำเนินการ = "form_action_p_pvdeGsVG5zNF_XLGPTvYSKCf43t8qZYSwcfZl2uzM"
ใครมีความคิดหรือทางออกที่ดีกว่า?