public function testAccessors() { $compiled = new CompiledRoute('prefix', 'regex', array('tokens'), array(), array(), array(), array(), array('variables')); $this->assertEquals('prefix', $compiled->getStaticPrefix(), '__construct() takes a static prefix as its second argument'); $this->assertEquals('regex', $compiled->getRegex(), '__construct() takes a regexp as its third argument'); $this->assertEquals(array('tokens'), $compiled->getTokens(), '__construct() takes an array of tokens as its fourth argument'); $this->assertEquals(array('variables'), $compiled->getVariables(), '__construct() takes an array of variables as its ninth argument'); }
public function testgetPatterngetDefaultsgetOptionsgetRequirements() { $route = new Route('/{foo}', array('foo' => 'bar'), array('foo' => '\\d+'), array('foo' => 'bar')); $compiled = new CompiledRoute($route, 'prefix', 'regex', array('tokens'), array('variables')); $this->assertEquals('/{foo}', $compiled->getPattern(), '->getPattern() returns the route pattern'); $this->assertEquals(array('foo' => 'bar'), $compiled->getDefaults(), '->getDefaults() returns the route defaults'); $this->assertEquals(array('foo' => '\\d+'), $compiled->getRequirements(), '->getRequirements() returns the route requirements'); $this->assertEquals(array_merge(array('compiler_class' => 'Symfony\\Component\\Routing\\RouteCompiler'), array('foo' => 'bar')), $compiled->getOptions(), '->getOptions() returns the route options'); }
public function testgetPatterngetDefaultsgetOptionsgetRequirements() { $route = new Route('/:foo', array('foo' => 'bar'), array('foo' => '\\d+'), array('foo' => 'bar')); $compiled = new CompiledRoute($route, 'prefix', 'regex', array('tokens'), array('variables')); $this->assertEquals('/:foo', $compiled->getPattern(), '->getPattern() returns the route pattern'); $this->assertEquals(array('foo' => 'bar'), $compiled->getDefaults(), '->getDefaults() returns the route defaults'); $this->assertEquals(array('foo' => '\\d+'), $compiled->getRequirements(), '->getRequirements() returns the route requirements'); $this->assertEquals(array_merge(array('variable_prefixes' => array(':'), 'segment_separators' => array('/', '.'), 'variable_regex' => '[\\w\\d_]+', 'text_regex' => '.+?', 'compiler_class' => 'Symfony\\Component\\Routing\\RouteCompiler'), array('foo' => 'bar')), $compiled->getOptions(), '->getOptions() returns the route options'); }
/** * process the route and request and save them. * * @param Route $route * * @return Route */ public function addCurrentRouteAndParams(RouteContract $route) { $this->uri = $route->getUri(); $uri = preg_replace('/\\{(\\w+?)\\?\\}/', '{$1}', $this->uri); /* * compile the route with symfony Route Compiler */ $this->compiled = (new SyfonyRoute($uri))->compile(); /* * Matches the current request against the compile route RegEx. * */ // decoded request path $path = $this->request->createFromGlobals()->decodedPath(); $decodedPath = "/" === $path ? $path : '/' . $path; if (preg_match($this->compiled->getRegex(), $decodedPath, $matches)) { /* * extract the parameters and set them to the current route parameters */ foreach ($matches as $key => $value) { if (is_string($key)) { array_push($this->currentParams, $value); } } /* * Set the current route to the route */ $this->currentRoute[$route->getMethods()][$decodedPath] = $route; /* * add the current route parameters to the current route */ $this->currentRoute[$route->getMethods()][$decodedPath]->setParameters($this->currentParams); return $route; } /* * if its a simple route that matches the request, set it to the route and return it */ if ($uri == $decodedPath) { if (sizeof($route->getMethods()) > 1) { foreach ($route->getMethods() as $method) { $this->currentRoute[$method][$uri] = $route; } } else { $this->currentRoute[$route->getMethods()][$uri] = $route; } } }
/** * Constructs a new compiled route object. * * This is a ridiculously long set of constructor parameters, but as this * object is little more than a collection of values it's not a serious * problem. The parent Symfony class does the same, as well, making it * difficult to override differently. * * @param \Symfony\Component\Routing\Route $route * A original Route instance. * @param int $fit * The fitness of the route. * @param string $fit * The pattern outline for this route. * @param int $num_parts * The number of parts in the path. * @param string $staticPrefix * The static prefix of the compiled route * @param string $regex * The regular expression to use to match this route * @param array $tokens * An array of tokens to use to generate URL for this route * @param array $pathVariables * An array of path variables * @param string|null $hostRegex * Host regex * @param array $hostTokens * Host tokens * @param array $hostVariables * An array of host variables * @param array $variables * An array of variables (variables defined in the path and in the host patterns) */ public function __construct(Route $route, $fit, $pattern_outline, $num_parts, $staticPrefix, $regex, array $tokens, array $pathVariables, $hostRegex = null, array $hostTokens = array(), array $hostVariables = array(), array $variables = array()) { parent::__construct($staticPrefix, $regex, $tokens, $pathVariables, $hostRegex, $hostTokens, $hostVariables, $variables); $this->route = $route; $this->fit = $fit; $this->patternOutline = $pattern_outline; $this->numParts = $num_parts; }
/** * Extract the parameter list from the request. * * @param \Illuminate\Http\Request $request * @return array */ public function bindParameters(Request $request) { preg_match($this->compiled->getRegex(), '/' . $request->path(), $matches); $parameters = $this->combineMatchesWithKeys(array_slice($matches, 1)); if (!is_null($this->compiled->getHostRegex())) { preg_match($this->compiled->getHostRegex(), $request->getHost(), $matches); $parameters = array_merge($this->combineMatchesWithKeys(array_slice($matches, 1)), $parameters); } return $this->parameters = $this->replaceDefaults($parameters); }
/** * Extract the parameter list from the host part of the request. * * @param \Illuminate\Http\Request $request * @param array $parameters * @return array */ protected function bindHostParameters(Request $request, $parameters) { preg_match($this->compiled->getHostRegex(), $request->getHost(), $matches); return array_merge($this->matchToKeys(array_slice($matches, 1)), $parameters); }
/** * {@inheritdoc} */ public function unserialize($serialized) { parent::unserialize($serialized); $data = unserialize($serialized); $this->fit = $data['fit']; $this->patternOutline = $data['patternOutline']; $this->numParts = $data['numParts']; }