* @copyright walkor * @link http://www.workerman.net/ * @license http://www.opensource.org/licenses/mit-license.php MIT License */ namespace Webman; use RuntimeException; use function array_merge; use function array_reverse; use function is_array; use function method_exists; class Middleware { /** * @var array */ protected static $instances = []; /** * @param mixed $allMiddlewares * @param string $plugin * @return void */ public static function load($allMiddlewares, string $plugin = '') { if (!is_array($allMiddlewares)) { return; } foreach ($allMiddlewares as $appName => $middlewares) { if (!is_array($middlewares)) { throw new RuntimeException('Bad middleware config'); } foreach ($middlewares as $className) { if (method_exists($className, 'process')) { static::$instances[$plugin][$appName][] = [$className, 'process']; } else { // @todo Log echo "middleware $className::process not exsits\n"; } } } } /** * @param string $plugin * @param string $appName * @param bool $withGlobalMiddleware * @return array|mixed */ public static function getMiddleware(string $plugin, string $appName, bool $withGlobalMiddleware = true) { $globalMiddleware = $withGlobalMiddleware && isset(static::$instances[$plugin]['']) ? static::$instances[$plugin][''] : []; if ($appName === '') { return array_reverse($globalMiddleware); } $appMiddleware = static::$instances[$plugin][$appName] ?? []; return array_reverse(array_merge($globalMiddleware, $appMiddleware)); } /** * @return void * @deprecated */ public static function container($_) { } }