/** * Call controller's action with parameters * * @param Object $controller * @param IRoute $route * @return mixed */ public function invoke($controller, IRoute $route) { $action = $this->naming->getName($route->getAction()); $method = $this->getActionMethod($controller, $action); $arguments = $this->findArguments($method, $route->getParameters()); return $method->invokeArgs($controller, $arguments); }
/** * @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; }