/** * On lance le dispatch de la requete avec les routes inséré * @param Response $response * @return bool */ public function perform(\Router\Response $response) { // ajout de la route global si existe $aApplyRoute = $this->routes['ANY']; if (isset($this->routes[$this->method])) { $aApplyRoute = array_merge($this->routes[$this->method], $aApplyRoute); } if (!empty($aApplyRoute)) { require_once __DIR__ . "/Route.php"; foreach ($aApplyRoute as $route) { // récuperation des params de la route et creation de l'objet pour test list($pattern_uri, $callback, $filters) = $route; $oRoute = new \Router\Route($pattern_uri, array_merge($this->filters, $filters)); if (false === ($params = $oRoute->match($this->request->getRequestUri()))) { continue; } // insert des params dans le request foreach ($params as $key => $value) { $this->request->setParam($key, $value); } // appel du callback si c'est possible if (is_callable($callback) === true) { ob_start(); call_user_func_array($callback, array($this->request, $response)); $response->appendBody(ob_get_contents()); ob_end_clean(); } return true; } unset($oRoute); } // renvoi false si aucune regle n'est passé return false; }
/** * Cette fonction est lancé par le routeur et permet de lancer l'action qui convient * selon les paramètre recu dans $request * @param \Router\Request $request * @param \Router\Response $response * @return mixed */ public function dispatch(Router\Request $request, Router\Response $response) { $sControllerName = $request->getParam('controller', $this->default['controller']); $sActionName = $request->getParam('action', $this->default['action']); // appel de l'action requise $output = $this->launch($sControllerName, $sActionName, array($request, $response)); // ajout du contenu dans le body de la response $response->appendBody($output); return $output; }