การพึ่งพาการทำให้เป็นอนุกรมลักษณะ
ใช้เพื่อหลีกเลี่ยงไม่ให้บริการที่มีอยู่ในคุณสมบัติของคลาสได้รับการทำให้เป็นอนุกรมโดยสมบูรณ์เมื่ออินสแตนซ์ของคลาสนั้นได้รับการทำให้เป็นอนุกรม ตัวระบุบริการจะถูกทำให้เป็นอนุกรมภายในอินสแตนซ์ของคลาสแทน
การพึ่งพาการทำให้เป็นอนุกรมลักษณะ
ไม่ได้ใช้เพื่อเพิ่มการพึ่งพาไปยังคลาสที่ใช้การพึ่งพาการฉีด หากคุณกำลังแก้ไขคลาสตัวจัดการการควบคุมการเข้าถึงที่มีอยู่ (ซึ่งไม่ใช่สิ่งที่ถูกต้องที่ต้องทำเมื่อคลาสนั้นใช้งานโดย Drupal core หรือโมดูลที่สนับสนุนซึ่งโฮสต์บน drupal.org) เพื่อเพิ่มการพึ่งพา คุณควรแก้ไข สร้างอินสแตนซ์ ()
วิธีการถ้ามีหรือเพิ่ม ตัวอย่างเช่น, เวิร์กโฟลว์ AccessControlHandler
คลาสใช้รหัสต่อไปนี้เพื่อแทรกการอ้างอิงที่ต้องการ
/**
* {@inheritdoc}
*/
ฟังก์ชันสแตติกสาธารณะ createInstance (ContainerInterface $container, EntityTypeInterface $entity_type) {
ส่งคืนค่าคงที่ใหม่ ($entity_type, $container
->get('plugin.manager.workflows.type'));
}
/**
* สร้างอินสแตนซ์ของตัวจัดการการควบคุมการเข้าถึงเวิร์กโฟลว์
*
* @param \Drupal\Core\Entity\EntityTypeInterface $entity_type
* คำจำกัดความประเภทเอนทิตี
* @param \Drupal\Component\Plugin\PluginManagerInterface $workflow_type_manager
* ตัวจัดการปลั๊กอินประเภทเวิร์กโฟลว์
*/
ฟังก์ชันสาธารณะ __construct (EntityTypeInterface $entity_type, PluginManagerInterface $workflow_type_manager) {
พาเรนต์::__construct($entity_type);
$this->workflowTypeManager = $workflow_type_manager;
}
กำลังดำเนินการวิธีที่ถูกต้องในการปรับเปลี่ยนตัวจัดการการควบคุมการเข้าถึงที่ใช้โดยเอนทิตี hook_entity_type_build()
และเปลี่ยนตัวจัดการการควบคุมการเข้าถึงด้วย EntityTypeInterface::setAccessClass()
. ตัวอย่างเช่น สำหรับโหนดเอนทิตี ฉันสามารถใช้รหัสต่อไปนี้
ฟังก์ชัน book_entity_type_build (อาร์เรย์ &$entity_types) {
/** @var \Drupal\Core\Entity\EntityTypeInterface[] $entity_types */
$entity_types['node']->setAccessClass('Drupal\mymodule\Access\ExtendedNodeAccessControlHandler');
}