*/ protected static array $plugins = []; public function __construct() { $this->registerPlugins(); } /** * @return array */ public function getPlugins(): array { return $this->plugins; } /** * @param array $parameters */ public function runHook(string $name, array $parameters): void { dd(static::$plugins); // only run active plugins' hooks foreach (static::$plugins as $plugin) { $plugin->{$name}(...$parameters); } } protected function registerPlugins(): void { $locator = service('locator'); $pluginsFiles = $locator->search('HelloWorld/Plugin.php'); // dd($pluginsFiles); foreach ($pluginsFiles as $file) { $className = $locator->findQualifiedNameFromPath($file); dd($file); if ($className === false) { continue; } $plugin = new $className(); if (! $plugin instanceof PluginInterface) { continue; } static::$plugins[] = $plugin; } } }