/** * Method to test getMatcher(). * * @return void * * @covers Windwalker\Router\Router::getMatcher */ public function testGetAndSetMatcher() { $this->assertInstanceOf('Windwalker\\Router\\Matcher\\MatcherInterface', $this->instance->getMatcher()); $matcher = new TrieMatcher(); $this->instance->setMatcher($matcher); $this->assertSame($matcher, $this->instance->getMatcher()); }
/** * Register routing. * * @param Router $router Router object. * @param string $option The component option name. * * @throws \LogicException * @return Router Registered router. */ public static function registerRouting(Router $router, $option) { // Don't register twice. if (self::$registered) { return $router; } // Register routers. $maps = static::getRouting($option); foreach ((array) $maps as $name => $map) { if (empty($map->pattern) || empty($map->view)) { // throw new \LogicException('Are you kidding me? no map, no run! Add pattern and view to: ' . $name); } $buildHandler = !empty($map->buildHandler) ? $map->buildHandler : ''; $parseHandler = !empty($map->parseHandler) ? $map->parseHandler : ''; $router->register($name, $map->pattern, $map->view, $buildHandler, $parseHandler); } return $router; }
/** * parseRoute * * @param string $route * @param string $method * @param array $options * * @throws \UnexpectedValueException * @return array|boolean */ public function match($route, $method = 'GET', $options = array()) { $matched = parent::match($route, $method, $options); $vars = $matched->getVariables(); if (!array_key_exists('_controller', $vars)) { throw new \UnexpectedValueException('Controller not found.', 500); } $controller = $vars['_controller']; unset($vars['_controller']); $this->setVariables($vars); return $controller; }
/** * Register routing. * * @param Router $router Router object. * @param string $option The component option name. * @param string $type The routing file type. * * @return RouterInterface */ public static function registerRouting(Router $router, $option, $type = self::TYPE_JSON) { // Don't register twice. if (self::$registered) { return $router; } // Register routers. $maps = static::getRouting($option, $type); $default = array('pattern' => null, 'view' => null, 'task' => null, 'layout' => null, 'format' => null, 'methods' => null, 'requirements' => null, 'extra' => null, 'buildHandler' => null, 'parseHandler' => null); foreach ((array) $maps as $name => $map) { $map = array_merge($default, $map); if (empty($map['pattern'])) { throw new \LogicException('Are you kidding me? Add pattern to: ' . $name); } $variables = array('view' => $map['view'], 'task' => $map['task'], 'layout' => $map['layout'], 'format' => $map['format']); $allowMethods = (array) $map['methods']; $options['requirements'] = (array) $map['requirements']; $options['extra'] = (array) $map['extra']; $options['extra']['buildHandler'] = !empty($map['buildHandler']) ? $map['buildHandler'] : ''; $options['extra']['parseHandler'] = !empty($map['parseHandler']) ? $map['parseHandler'] : ''; $router->addRoute(new Route($name, $map['pattern'], $variables, $allowMethods, $options)); } return $router; }
/** * Match route. * * @param string $route * @param string $method * @param array $options * * @return Route|boolean */ public function match($route, $method = 'GET', $options = array()) { $matched = parent::match($route, $method, $options); $extra = $matched->getExtra(); if (isset($extra['parseHandler']) && is_callable($extra['parseHandler'])) { $variables = call_user_func_array($extra['parseHandler'], array($matched->getVariables())); $matched->setVariables($variables); } $this->matched = $matched; $this->extra->reset()->load($matched->getExtra()); return $matched; }