app->make(ExtensionManager::class); $event = new GetCronJobsEvent(); foreach (extension_name_list() as $extensionName) { $extension = $extensionManager->getExtension($extensionName); if ($extension->available()) { $cronJobs = $extension->getCronJobs(); foreach ($cronJobs as $cronJobClass) { $event->push($cronJobClass); } } } $this->app->event->trigger($event); foreach ($event as $cronJobClass) { $ref = new ReflectionClass($cronJobClass); foreach ($ref->getMethods(ReflectionMethod::IS_PUBLIC) as $method) { $attributes = $method->getAttributes(Cron::class); foreach ($attributes as $attribute) { $cronInstance = $attribute->newInstance(); $name = $cronInstance->name ?: $cronJobClass . '@' . $method->getName(); new Crontab($cronInstance->rule, [$this->app->make($cronJobClass), $method->getName()], $name); } } } } }