public static function launch(&$request) { $response = new Response(); $params =& $request->getParams(); // Si app/controller/action vide => 404 if (empty($params['module']) || empty($params['controller']) || empty($params['action'])) { $response->body = 'URL incompléte'; $response->send404(); return $response; } $moduleName = Url::toClass($params['module']); $controllerName = Url::toClass($params['controller']); $actionName = Url::toClass($params['action']); // Et on lance $controller = '\\App\\Modules\\' . $moduleName . '\\Controller\\' . $controllerName . 'Controller'; if (!class_exists($controller)) { $response->body = 'Controleur ' . $controller . ' introuvable'; $response->send404(); } $oController = new $controller($request, $response); if (!method_exists($oController, $actionName)) { $response->body = 'Action ' . $actionName . ' introuvable'; $response->send404(); return $response; } $response = $oController->runAction($actionName); return $response; }
/** * Fonction principale pour l'affichage "standard" * @return void * @param $data Array * @param $params Array */ public function render($template, $data = array()) { if (!is_array($template)) { $template = Url::selector($template, array('module' => $this->params['module'], 'controller' => $this->params['controller'])); } $moduleName = Url::toClass($template['module']); $controllerName = Url::toClass($template['controller']); $actionName = Url::toClass($template['action']); $template = LI_APP . '/Modules/' . $moduleName . '/View/' . $controllerName . '/' . $actionName . '.php'; $this->data = $data; ob_start(); include $template; $content = ob_get_contents(); ob_end_clean(); return $content; }
/** * * @return * @param $params Object */ public function render_action($template = null) { // On envoi les erreurs au js if (!empty($this->jsErrors)) { $render = new \stdClass(); $render->code = 'error'; $render->msg = implode('<br />', $this->jsErrors); $this->render_text(json_encode($render)); return true; } // on envoi le success au js if (!empty($this->jsSuccess)) { $render = new \stdClass(); $render->code = 'success'; $msgs = array(); $datas = array(); foreach ($this->jsSuccess as $s) { $msgs[] = $s['msg']; $datas = array_merge($datas, $s['datas']); } $render->msg = implode('<br />', $msgs); $render->datas = $datas; $this->render_text(json_encode($render)); return true; } if (is_null($template)) { $template = array('module' => $this->params['module'], 'controller' => $this->params['controller'], 'action' => $this->params['action']); } // On cherche si ce template est contenu dans un layout $layout_name = null; $actionName = Url::toClass($this->params['action']); if (array_key_exists($actionName, $this->actions_with_layout)) { if (!is_null($this->actions_with_layout[$actionName])) { $layout_name = $this->actions_with_layout[$actionName]; } } elseif (array_key_exists('Default', $this->actions_with_layout)) { $layout_name = $this->actions_with_layout['Default']; } // Gestion d'un layout if (!is_null($layout_name)) { $this->data['layout_content'] = $this->view->render($template, $this->data); $layout = array('module' => $this->params['module'], 'controller' => 'Layout', 'action' => $layout_name); $body = $this->view->render($layout, $this->data); // no layout } else { $body = $this->view->render($template, $this->data); } $this->finalize_render($body); }