DependencySerializationTrait
используется, чтобы избежать полной сериализации службы, содержащейся в свойстве класса, при сериализации этого экземпляра класса. Вместо этого идентификатор службы сериализуется внутри экземпляра класса.
DependencySerializationTrait
не используется для добавления зависимостей к классу, использующему внедрение зависимостей. Если вы редактируете существующий класс обработчика управления доступом (что неправильно делать, когда класс реализован ядром Drupal или вспомогательным модулем, размещенным на drupal.org) для добавления дополнительных зависимостей, вам следует отредактировать его создать экземпляр ()
метод, если он существует, или добавьте его. Например, Рабочий процессAccessControlHandler
class использует следующий код для внедрения необходимых ему зависимостей.
/**
* {@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()
. Например, для объекта Node я мог бы использовать следующий код.
function book_entity_type_build (массив и $entity_types) {
/** @var \Drupal\Core\Entity\EntityTypeInterface[] $entity_types */
$entity_types['node']->setAccessClass('Drupal\mymodule\Access\ExtendedNodeAccessControlHandler');
}