make(ExtensionManager::class); foreach (Helper::extension_name_list() as $extensionName) { if ($extensionManager->getInfo($extensionName)->status !== ExtensionStatusEnum::ENABLED) { continue; } $extension = $extensionManager->getExtension($extensionName); $hookClassList = $extension->getHooks(); foreach ($hookClassList as $hookClass) { $ref = new ReflectionClass($hookClass); foreach ($ref->getMethods(ReflectionMethod::IS_PUBLIC) as $method) { $attributes = $method->getAttributes(Hook::class); foreach ($attributes as $attr) { $hookNameList = (array)$attr->newInstance()->hook; foreach ($hookNameList as $hookName) { Event::listen($hookName, [$hookClass, $method->getName()]); } } } } } $app->event->trigger('hook_init', $app); } }