public function match($url, ICompiledRule $rule, IRoute $route) { if (!preg_match($rule->getRegex(), $url, $matches)) { return false; } $vars = $this->findVariables($matches, $rule->getRule()->getParameters()); if (!$this->checkRequiredVars($vars)) { return false; } $route->setController($vars['controller'])->setAction($vars['action'])->setPackage($vars['package']); unset($vars['controller'], $vars['action'], $vars['package']); $route->setParameters($vars); return true; }
/** * @param IRoute $route * * @return bool */ public function resolveRouteParameters(IRoute $route) { $parameters = $route->getParameters(); $resolvers = $this->getResolvers(); $invoker = $this->getParameterResolverInvoker(); foreach ($parameters as $name => $parameter) { $resolver = array_get($resolvers, $name); if ($resolver instanceof IRouteResolver) { $value = $invoker->invoke($resolver->getResolver(), $parameter); if ($value === null) { return false; } $parameters[$name] = $value; } } $route->setParameters($parameters); return true; }