. */ namespace SP\Core\Bootstrap; use RuntimeException; use SP\Domain\Common\Providers\Filter; use SP\Domain\Core\Bootstrap\RouteContextData; use function SP\__u; /** * Class RouteContext */ final class RouteContext { private const ROUTE_REGEX = /** @lang RegExp */ '#(?P[a-zA-Z]+)(?:/(?P[a-zA-Z]+))?(?P(/[a-zA-Z\d.]+)+)?#'; public static function getRouteContextData(string $route): RouteContextData { if (!preg_match_all(self::ROUTE_REGEX, $route, $matches)) { throw new RuntimeException(__u('Invalid route')); } $controllerName = $matches['controller'][0]; $actionName = empty($matches['actions'][0]) ? 'index' : $matches['actions'][0]; $methodName = sprintf('%sAction', $actionName); $methodParams = empty($matches['params'][0]) ? [] : Filter::getArray(explode('/', trim($matches['params'][0], '/'))); return new RouteContextData($controllerName, $actionName, $methodName, $methodParams); } }