/** * 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; } } }
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 testAccessors() { $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($route, $compiled->getRoute(), '__construct() takes a route as its first argument'); $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 fifth argument'); }
/** * 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); }
/** * Get the parameter matches for the path portion of the URI. * * @param \Illuminate\Http\Request $request * @return array */ protected function bindPathParameters(Request $request) { preg_match($this->compiled->getRegex(), '/' . $request->decodedPath(), $matches); return $matches; }