/** * 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); }
protected function notifyView(IRoute $route, IResponsePresenter $presenter) { $this->emitter->notify(new Event($this, 'controller.view_context', array('route' => $route, 'presenter' => $presenter))); $event = new Event($this, 'controller.view', array('route' => $route, 'presenter' => $presenter)); $this->emitter->notifyUntil($event); if (!$event->isHandled()) { throw new RuntimeException("No template applied for '{$presenter->getViewName()}' view name, which was called by '{$route->getController()}/{$route->getAction()}'"); } return $event->getValue(); }
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; }
/** * Container creates a controller instance or returns false, if * controller couldn't be created. * * @param IRoute $route Routing information about controller * @return mixed Controller instance or false */ public function loadController(IRoute $route) { $package = $route->getPackage(); $name = $route->getController(); $fileName = $this->controllerNaming->getFileName($name); $class = $this->controllerNaming->getClassName($name); if (!$this->includeController($package, $class, $fileName)) { return false; } else { $controller = $this->container->getInstanceOf($class); $controller->setContainer($this->container); return $controller; } }
/** * @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; }
/** * Transform the action name by using actionNaming, * find the Command name identifier inside the $controller::getCommands(). * If command is not set, return false. * * @param mixed $controller * @param IRoute $route * @return mixed */ protected function getCommandIdentifier($controller, IRoute $route) { $commands = $controller->getCommands(); $actionName = $this->actionNaming->getName($route->getAction()); return isset($commands[$actionName]) ? $commands[$actionName] : false; }