/** * 获取route的scheme和port * @param RouteInterface $route * @return array */ protected function getRouteSchemeAndPort(RouteInterface $route) { $scheme = $this->context->getScheme(); $requiredSchemes = $route->getSchemes(); //如果当前请求协议不在route要求的协议内则使用第一个要求的协议 if (!empty($requiredSchemes) && !in_array($scheme, $requiredSchemes)) { $scheme = reset($requiredSchemes); } $port = ''; if (strcasecmp($scheme, 'http') == 0 && $this->context->getHttpPort() != 80) { $port = ':' . $this->context->getHttpPort(); } elseif (strcasecmp($scheme, 'https') == 0 && $this->context->getHttpsPort() != 443) { $port = ':' . $this->context->getHttpsPort(); } return [$scheme, $port]; }
/** * 匹配scheme * @param RouteInterface $route * @return boolean */ protected function matchSchema(RouteInterface $route) { //没有scheme直接忽略 if (empty($route->getSchemes())) { return true; } return in_array($this->context->getScheme(), $route->getSchemes()); }