_serviceIds = []; $vars = get_object_vars($this); foreach ($vars as $key => $value) { if (is_object($value) && isset($value->_serviceId)) { // If a class member was instantiated by the dependency injection // container, only store its ID so it can be used to get a fresh object // on unserialization. $this->_serviceIds[$key] = $value->_serviceId; unset($vars[$key]); } // Special case the container, which might not have a service ID. elseif ($value instanceof ContainerInterface) { $this->_serviceIds[$key] = 'service_container'; unset($vars[$key]); } } return array_keys($vars); } /** * {@inheritdoc} */ public function __wakeup() { // Tests in isolation potentially unserialize in the parent process. if (isset($GLOBALS['__PHPUNIT_BOOTSTRAP']) && !\Drupal::hasContainer()) { return; } $container = \Drupal::getContainer(); foreach ($this->_serviceIds as $key => $service_id) { $this->$key = $container->get($service_id); } $this->_serviceIds = []; } }