/**
  * 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;
     }
 }
Exemplo n.º 5
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;
 }
 /**
  * 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;
 }