/** * @param HttpRequest $request * @return Redirection */ public function findOneByRequest(HttpRequest $request) { $requestPath = preg_replace('/(\\\\|%|_)/', '\\\\$1', $request->getRelativePath()); $query = $this->createQuery(); $query->getQueryBuilder()->where(':requestPath LIKE e.requestPattern')->setParameter('requestPath', $requestPath); return $query->execute()->getFirst(); }
/** * @param HttpRequest $request * @param Redirection $redirection * @return void */ protected function sendRedirectHeaders(HttpRequest $request, Redirection $redirection) { if (headers_sent()) { return; } $sourceUriPath = $redirection->getRequestPattern(); $targetUriPath = $redirection->getTarget(); if (strpos($sourceUriPath, '%') !== false) { $sourceUriPath = preg_quote($sourceUriPath, '/'); $sourceUriPath = str_replace('%', '(.*)', $sourceUriPath); $targetUriPath = preg_replace('/' . $sourceUriPath . '/', $redirection->getTarget(), $request->getRelativePath()); } header($redirection->getStatusLine()); header('Location: ' . $request->getBaseUri() . $targetUriPath); }
/** * Generates the Matching cache identifier for the given Request * * @param Request $httpRequest * @return string */ protected function buildRouteCacheIdentifier(Request $httpRequest) { return md5(sprintf('%s_%s_%s', $httpRequest->getUri()->getHost(), $httpRequest->getRelativePath(), $httpRequest->getMethod())); }
/** * Checks whether $routePath corresponds to this Route. * If all Route Parts match successfully TRUE is returned and * $this->matchResults contains an array combining Route default values and * calculated matchResults from the individual Route Parts. * * @param \TYPO3\Flow\Http\Request $httpRequest the HTTP request to match * @return boolean TRUE if this Route corresponds to the given $routePath, otherwise FALSE * @throws InvalidRoutePartValueException * @see getMatchResults() */ public function matches(Request $httpRequest) { $routePath = $httpRequest->getRelativePath(); $this->matchResults = null; if ($this->uriPattern === null) { return false; } if (!$this->isParsed) { $this->parse(); } if ($this->hasHttpMethodConstraints() && !in_array($httpRequest->getMethod(), $this->httpMethods)) { return false; } $matchResults = array(); $routePath = trim($routePath, '/'); $skipOptionalParts = false; $optionalPartCount = 0; /** @var $routePart RoutePartInterface */ foreach ($this->routeParts as $routePart) { if ($routePart->isOptional()) { $optionalPartCount++; if ($skipOptionalParts) { if ($routePart->getDefaultValue() === null) { return false; } continue; } } else { $optionalPartCount = 0; $skipOptionalParts = false; } if ($routePart->match($routePath) !== true) { if ($routePart->isOptional() && $optionalPartCount === 1) { if ($routePart->getDefaultValue() === null) { return false; } $skipOptionalParts = true; } else { return false; } } $routePartValue = $routePart->getValue(); if ($routePartValue !== null) { if ($this->containsObject($routePartValue)) { throw new InvalidRoutePartValueException('RoutePart::getValue() must only return simple types after calling RoutePart::match(). RoutePart "' . get_class($routePart) . '" returned one or more objects in Route "' . $this->getName() . '".'); } $matchResults = Arrays::setValueByPath($matchResults, $routePart->getName(), $routePartValue); } } if (strlen($routePath) > 0) { return false; } $this->matchResults = Arrays::arrayMergeRecursiveOverrule($this->defaults, $matchResults); return true; }