DependencySerializationTrait
được sử dụng để tránh việc dịch vụ chứa trong thuộc tính lớp được tuần tự hóa hoàn toàn khi thể hiện của lớp đó được tuần tự hóa. Thay vào đó, mã định danh dịch vụ được tuần tự hóa trong thể hiện của lớp.
DependencySerializationTrait
không được sử dụng để thêm các phụ thuộc vào một lớp sử dụng tính năng Tiêm phụ thuộc. Nếu bạn đang chỉnh sửa một lớp trình xử lý kiểm soát truy cập hiện có (đây không phải là điều nên làm khi lớp này được triển khai bởi lõi Drupal hoặc một mô-đun đóng góp được lưu trữ trên drupal.org) để thêm các phần phụ thuộc khác, thì bạn nên chỉnh sửa lớp đó. tạoInstance()
phương pháp, nếu nó tồn tại, hoặc thêm nó. Ví dụ, các WorkflowAccessControlHandler
class sử dụng đoạn mã sau để thêm các phụ thuộc mà nó cần.
/**
* {@inheritdoc}
*/
hàm tĩnh công cộng createInstance(ContainerInterface $container, EntityTypeInterface $entity_type) {
trả lại tĩnh mới($entity_type, $container
->get('plugin.manager.workflows.type'));
}
/**
* Xây dựng phiên bản trình xử lý kiểm soát truy cập quy trình làm việc.
*
* @param \Drupal\Core\Entity\EntityTypeInterface $entity_type
* Định nghĩa kiểu thực thể.
* @param \Drupal\Component\Plugin\PluginManagerInterface $workflow_type_manager
* Trình quản lý plugin loại quy trình làm việc.
*/
chức năng công khai __construct(EntityTypeInterface $entity_type, PluginManagerInterface $workflow_type_manager) {
cha mẹ::__construct($entity_type);
$this->workflowTypeManager = $workflow_type_manager;
}
Cách chính xác để thay đổi trình xử lý kiểm soát truy cập được sử dụng bởi một thực thể đang triển khai hook_entity_type_build()
và thay đổi trình xử lý kiểm soát truy cập bằng EntityTypeInterface::setAccessClass()
. Ví dụ: đối với thực thể Nút, tôi có thể sử dụng đoạn mã sau.
hàm book_entity_type_build(mảng &$entity_types) {
/** @var \Drupal\Core\Entity\EntityTypeInterface[] $entity_types */
$entity_types['node']->setAccessClass('Drupal\mymodule\Access\ExtendedNodeAccessControlHandler');
}