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;
 }
Example #2
0
 /**
  * @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;
 }