public function testInstance() { $rule = new RedirectRule([1, Redirect::TYPE_EXACT, Redirect::TARGET_TYPE_PATH_URL, '/from/url', '/to/url', null, null, 301, null, Carbon::today(), Carbon::tomorrow()]); self::assertEquals(1, $rule->getId()); self::assertEquals(Redirect::TYPE_EXACT, $rule->getMatchType()); self::assertEquals(Redirect::TARGET_TYPE_PATH_URL, $rule->getTargetType()); self::assertEquals('/from/url', $rule->getFromUrl()); self::assertEquals('/to/url', $rule->getToUrl()); self::assertEquals(301, $rule->getStatusCode()); self::assertEquals(Carbon::today(), $rule->getFromDate()); self::assertEquals(Carbon::tomorrow(), $rule->getToDate()); }
/** * Perform a placeholder URL match * * @param RedirectRule $rule * @param string $url * @return RedirectRule|bool */ private function matchPlaceholders(RedirectRule $rule, $url) { $route = new Route($rule->getFromUrl()); foreach ($rule->getRequirements() as $requirement) { try { $route->setRequirement(str_replace(['{', '}'], '', $requirement['placeholder']), $requirement['requirement']); } catch (\InvalidArgumentException $e) { // Catch empty requirement / placeholder } } $routeCollection = new RouteCollection(); $routeCollection->add($rule->getId(), $route); try { $matcher = new UrlMatcher($routeCollection, new RequestContext('/')); $match = $matcher->match($url); $items = array_except($match, '_route'); foreach ($items as $key => $value) { $placeholder = '{' . $key . '}'; $replacement = $this->findReplacementForPlaceholder($rule, $placeholder); $items[$placeholder] = $replacement === null ? $value : $replacement; unset($items[$key]); } $rule->setPlaceholderMatches($items); } catch (\Exception $e) { return false; } return $rule; }