diff --git a/composer.json b/composer.json index 23b6b9e..a6a8d63 100644 --- a/composer.json +++ b/composer.json @@ -63,7 +63,7 @@ "test-server": "echo \"Running Test Server\" && php -S localhost:8000 -t tests/server/", "test-server-v2": "echo \"Running Test Server\" && php -S localhost:8000 -t tests/server-v2/", "test-coverage:win": "del clover.xml && phpunit --coverage-html=coverage --coverage-clover=clover.xml && coverage-check clover.xml 100", - "lint": "phpstan --no-progress -cphpstan.neon", + "lint": "phpstan --no-progress --memory-limit=256M -cphpstan.neon", "beautify": "phpcbf --standard=phpcs.xml", "phpcs": "phpcs --standard=phpcs.xml -n", "post-install-cmd": [ diff --git a/flight/Engine.php b/flight/Engine.php index eca1d19..63fd05d 100644 --- a/flight/Engine.php +++ b/flight/Engine.php @@ -34,19 +34,19 @@ use flight\net\Route; * @method EventDispatcher eventDispatcher() Gets event dispatcher * * # Routing - * @method Route route(string $pattern, callable|string $callback, bool $pass_route = false, string $alias = '') + * @method Route route(string $pattern, callable|string|array{0: class-string, 1: string} $callback, bool $pass_route = false, string $alias = '') * Routes a URL to a callback function with all applicable methods - * @method void group(string $pattern, callable $callback, array<int, callable|object> $group_middlewares = []) + * @method void group(string $pattern, callable $callback, (class-string|callable|array{0: class-string, 1: string})[] $group_middlewares = []) * Groups a set of routes together under a common prefix. - * @method Route post(string $pattern, callable|string $callback, bool $pass_route = false, string $alias = '') + * @method Route post(string $pattern, callable|string|array{0: class-string, 1: string} $callback, bool $pass_route = false, string $alias = '') * Routes a POST URL to a callback function. - * @method Route put(string $pattern, callable|string $callback, bool $pass_route = false, string $alias = '') + * @method Route put(string $pattern, callable|string|array{0: class-string, 1: string} $callback, bool $pass_route = false, string $alias = '') * Routes a PUT URL to a callback function. - * @method Route patch(string $pattern, callable|string $callback, bool $pass_route = false, string $alias = '') + * @method Route patch(string $pattern, callable|string|array{0: class-string, 1: string} $callback, bool $pass_route = false, string $alias = '') * Routes a PATCH URL to a callback function. - * @method Route delete(string $pattern, callable|string $callback, bool $pass_route = false, string $alias = '') + * @method Route delete(string $pattern, callable|string|array{0: class-string, 1: string} $callback, bool $pass_route = false, string $alias = '') * Routes a DELETE URL to a callback function. - * @method void resource(string $pattern, string $controllerClass, array<string, string|array<string>> $methods = []) + * @method void resource(string $pattern, class-string $controllerClass, array<string, string|array<string>> $methods = []) * Adds standardized RESTful routes for a controller. * @method Router router() Gets router * @method string getUrl(string $alias) Gets a url from an alias @@ -85,10 +85,29 @@ class Engine * @var array<string> List of methods that can be extended in the Engine class. */ private const MAPPABLE_METHODS = [ - 'start', 'stop', 'route', 'halt', 'error', 'notFound', - 'render', 'redirect', 'etag', 'lastModified', 'json', 'jsonHalt', 'jsonp', - 'post', 'put', 'patch', 'delete', 'group', 'getUrl', 'download', 'resource', - 'onEvent', 'triggerEvent' + 'start', + 'stop', + 'route', + 'halt', + 'error', + 'notFound', + 'render', + 'redirect', + 'etag', + 'lastModified', + 'json', + 'jsonHalt', + 'jsonp', + 'post', + 'put', + 'patch', + 'delete', + 'group', + 'getUrl', + 'download', + 'resource', + 'onEvent', + 'triggerEvent' ]; /** @var array<string, mixed> Stored variables. */ @@ -425,26 +444,26 @@ class Engine if ($eventName === Dispatcher::FILTER_BEFORE && is_object($middleware) === true && ($middleware instanceof Closure)) { $middlewareObject = $middleware; - // If the object has already been created, we can just use it if the event name exists. + // If the object has already been created, we can just use it if the event name exists. } elseif (is_object($middleware) === true) { - $middlewareObject = method_exists($middleware, $eventName) === true ? [ $middleware, $eventName ] : false; + $middlewareObject = method_exists($middleware, $eventName) === true ? [$middleware, $eventName] : false; - // If the middleware is a string, we need to create the object and then call the event. + // If the middleware is a string, we need to create the object and then call the event. } elseif (is_string($middleware) === true && method_exists($middleware, $eventName) === true) { $resolvedClass = null; // if there's a container assigned, we should use it to create the object if ($this->dispatcher->mustUseContainer($middleware) === true) { $resolvedClass = $this->dispatcher->resolveContainerClass($middleware, $params); - // otherwise just assume it's a plain jane class, so inject the engine - // just like in Dispatcher::invokeCallable() + // otherwise just assume it's a plain jane class, so inject the engine + // just like in Dispatcher::invokeCallable() } elseif (class_exists($middleware) === true) { $resolvedClass = new $middleware($this); } // If something was resolved, create an array callable that will be passed in later. if ($resolvedClass !== null) { - $middlewareObject = [ $resolvedClass, $eventName ]; + $middlewareObject = [$resolvedClass, $eventName]; } } diff --git a/flight/Flight.php b/flight/Flight.php index 7e43877..064bd16 100644 --- a/flight/Flight.php +++ b/flight/Flight.php @@ -34,19 +34,19 @@ require_once __DIR__ . '/autoload.php'; * @method EventDispatcher eventDispatcher() Gets event dispatcher * * # Routing - * @method static Route route(string $pattern, callable|string $callback, bool $pass_route = false, string $alias = '') + * @method static Route route(string $pattern, callable|string|array{0: class-string, 1: string} $callback, bool $pass_route = false, string $alias = '') * Maps a URL pattern to a callback with all applicable methods. - * @method static void group(string $pattern, callable $callback, callable[] $group_middlewares = []) + * @method static void group(string $pattern, callable $callback, (class-string|callable|array{0: class-string, 1: string})[] $group_middlewares = []) * Groups a set of routes together under a common prefix. - * @method static Route post(string $pattern, callable|string $callback, bool $pass_route = false, string $alias = '') + * @method static Route post(string $pattern, callable|string|array{0: class-string, 1: string} $callback, bool $pass_route = false, string $alias = '') * Routes a POST URL to a callback function. - * @method static Route put(string $pattern, callable|string $callback, bool $pass_route = false, string $alias = '') + * @method static Route put(string $pattern, callable|string|array{0: class-string, 1: string} $callback, bool $pass_route = false, string $alias = '') * Routes a PUT URL to a callback function. - * @method static Route patch(string $pattern, callable|string $callback, bool $pass_route = false, string $alias = '') + * @method static Route patch(string $pattern, callable|string|array{0: class-string, 1: string} $callback, bool $pass_route = false, string $alias = '') * Routes a PATCH URL to a callback function. - * @method static Route delete(string $pattern, callable|string $callback, bool $pass_route = false, string $alias = '') + * @method static Route delete(string $pattern, callable|string|array{0: class-string, 1: string} $callback, bool $pass_route = false, string $alias = '') * Routes a DELETE URL to a callback function. - * @method static void resource(string $pattern, string $controllerClass, array<string, string|array<string>> $methods = []) + * @method static void resource(string $pattern, class-string $controllerClass, array<string, string|array<string>> $methods = []) * Adds standardized RESTful routes for a controller. * @method static Router router() Returns Router instance. * @method static string getUrl(string $alias, array<string, mixed> $params = []) Gets a url from an alias diff --git a/flight/net/Router.php b/flight/net/Router.php index 8025024..455fdb4 100644 --- a/flight/net/Router.php +++ b/flight/net/Router.php @@ -56,12 +56,20 @@ class Router * * @var array<int, string> */ - protected array $allowedMethods = ['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'HEAD', 'OPTIONS']; + protected array $allowedMethods = [ + 'GET', + 'POST', + 'PUT', + 'PATCH', + 'DELETE', + 'HEAD', + 'OPTIONS' + ]; /** * Gets mapped routes. * - * @return array<int,Route> Array of routes + * @return array<int, Route> Array of routes */ public function getRoutes(): array { @@ -80,7 +88,7 @@ class Router * Maps a URL pattern to a callback function. * * @param string $pattern URL pattern to match. - * @param callable|string $callback Callback function or string class->method + * @param callable|string|array{0: class-string, 1: string} $callback Callback function or string `class->method` * @param bool $pass_route Pass the matching route object to the callback. * @param string $route_alias Alias for the route. */ @@ -133,7 +141,7 @@ class Router * Creates a GET based route * * @param string $pattern URL pattern to match - * @param callable|string $callback Callback function or string class->method + * @param callable|string|array{0: class-string, 1: string} $callback Callback function or string `class->method` * @param bool $pass_route Pass the matching route object to the callback * @param string $alias Alias for the route */ @@ -146,7 +154,7 @@ class Router * Creates a POST based route * * @param string $pattern URL pattern to match - * @param callable|string $callback Callback function or string class->method + * @param callable|string|array{0: class-string, 1: string} $callback Callback function or string `class->method` * @param bool $pass_route Pass the matching route object to the callback * @param string $alias Alias for the route */ @@ -159,7 +167,7 @@ class Router * Creates a PUT based route * * @param string $pattern URL pattern to match - * @param callable|string $callback Callback function or string class->method + * @param callable|string|array{0: class-string, 1: string} $callback Callback function or string `class->method` * @param bool $pass_route Pass the matching route object to the callback * @param string $alias Alias for the route */ @@ -172,7 +180,7 @@ class Router * Creates a PATCH based route * * @param string $pattern URL pattern to match - * @param callable|string $callback Callback function or string class->method + * @param callable|string|array{0: class-string, 1: string} $callback Callback function or string `class->method` * @param bool $pass_route Pass the matching route object to the callback * @param string $alias Alias for the route */ @@ -185,7 +193,7 @@ class Router * Creates a DELETE based route * * @param string $pattern URL pattern to match - * @param callable|string $callback Callback function or string class->method + * @param callable|string|array{0: class-string, 1: string} $callback Callback function or string `class->method` * @param bool $pass_route Pass the matching route object to the callback * @param string $alias Alias for the route */ @@ -199,7 +207,7 @@ class Router * * @param string $groupPrefix group URL prefix (such as /api/v1) * @param callable $callback The necessary calling that holds the Router class - * @param array<int, callable|object> $groupMiddlewares + * @param (class-string|callable|array{0: class-string, 1: string})[] $groupMiddlewares * The middlewares to be applied to the group. Example: `[$middleware1, $middleware2]` */ public function group(string $groupPrefix, callable $callback, array $groupMiddlewares = []): void @@ -226,7 +234,7 @@ class Router if ($urlMatches === true && $methodMatches === true) { $this->executedRoute = $route; return $route; - // capture the route but don't execute it. We'll use this in Engine->start() to throw a 405 + // capture the route but don't execute it. We'll use this in Engine->start() to throw a 405 } elseif ($urlMatches === true && $methodMatches === false) { $this->executedRoute = $route; } @@ -240,7 +248,7 @@ class Router * Gets the URL for a given route alias * * @param string $alias the alias to match - * @param array<string,mixed> $params the parameters to pass to the route + * @param array<string, mixed> $params the parameters to pass to the route */ public function getUrlByAlias(string $alias, array $params = []): string { @@ -311,7 +319,7 @@ class Router return in_array($key, $only, true) === true; }, ARRAY_FILTER_USE_KEY); - // Exclude these controller methods + // Exclude these controller methods } elseif (isset($options['except']) === true) { $except = $options['except']; $defaultMapping = array_filter($defaultMapping, function ($key) use ($except) { @@ -331,7 +339,7 @@ class Router foreach ($defaultMapping as $controllerMethod => $methodPattern) { $router->map( $methodPattern, - [ $controllerClass, $controllerMethod ] + [$controllerClass, $controllerMethod] )->setAlias($aliasBase . '.' . $controllerMethod); } },