expire(); }; if (!isset($config['registered_callbacks']['after_delete'])) { $config['registered_callbacks']['after_delete'] = []; } $config['registered_callbacks']['after_delete'][] = function ($node): void { self::getDescendantsCacheArray()->expire(); }; return $config; } protected function getDescendantIds(): array { $cache = self::getDescendantsCacheArray(); if (isset($cache[$this->id])) { return $cache[$this->id]; } $ids = []; foreach ($this->getChildNodes() as $child) { $ids = array_merge($ids, [$child->id], $child->getDescendantIds()); } $cache[$this->id] = $ids; return $ids; } }