public static function run() { $router = new Router(); $dispatcher = new Dispatcher($router, array("requireViewFile" => !in_array($router->getAction(), array_keys(static::$actionsWithDataOnly)))); static::$dispatcher =& $dispatcher; $action = $dispatcher->getAction(); $controller = $dispatcher->getController(); $lang = $dispatcher->getLang(); $module = $dispatcher->getModule(); $permission = $dispatcher->getPermission(); $view = $dispatcher->getView(); $info = array("action" => $action, "controller" => $controller, "data" => $dispatcher->getData(), "extra" => $dispatcher->getExtra(), "lang" => $lang, "module" => $module, "view" => $view); if ($permission::getPermission($action, Session::getPerm(), $info) === false) { $dispatcher->setError(403); $info["action"] = $action = $dispatcher->getAction(); $info["controller"] = $controller = $dispatcher->getController(); $info["module"] = $module = $dispatcher->getModule(); $info["view"] = $view = $dispatcher->getView(); } //TASK: przeniesc do __constructStatic, znalezc inne wywolania __init i to samo! $view::__init($action); $view::obStart(); if (array_key_exists($action, static::$actionsWithDataOnly)) { header("Content-Type: " . static::$actionsWithDataOnly[$action]); //TODO: czy metody withDataOnly powinny otrzymywac argument $viewParams["info"] ? if (is_callable(array($controller, $action))) { echo $controller::$action(); } elseif (is_callable(array($controller, "{$action}_"))) { $action2 = "{$action}_"; echo $controller::$action2(); } } else { if (Config::getOne("requireWww")) { Utils\Header::redirectIfNotWww(); } $viewParams = array("info" => $info); // Troche magii: // Jesli mamy modul, w ktorym akcja nazywa sie tak samo jak modul - to PHP uzna akcje za konstruktor, lecz ten nie moze byc statyczny wiec bedzie blad PHP. // Wtedy definiujemy akcje jako z sufixem "_" (np. "AKCJA_"), a tu umozliwiamy jej wywolanie. // Przyklad: \App\Controller\Index::index if (is_callable(array($controller, $action))) { $viewParams["data"] = $controller::$action($viewParams["info"]); } elseif (is_callable(array($controller, "{$action}_"))) { $action2 = "{$action}_"; $viewParams["data"] = $controller::$action2($viewParams["info"]); } $bodyContent = static::loadViewFile($view::getViewFile($lang, $module, $action), $viewParams); $headerContent = static::loadViewFile($view::getViewFile($lang, "common", "header"), $viewParams); $view::printSite(["bodyHeader" => $headerContent, "body" => $bodyContent, "info" => $info]); } $view::obFinish(); }
/** * Metoda generująca link do strony. * * @access public * @param string? $_module[=NULL] nazwa kontrolera * @param string? $_action[=NULL] nazwa akcji * @param string? $_extra[=NULL] wartość dodatkowych danych dla żądania * @return string Link do zadanej strony * @static * @see Config::get ("index") * @see Config::get ("usingModRewrite") */ public static function generateLink($_) { $url = ""; $url = Config::getOne("url", "") . "/" . Config::getOne("index", "index.php"); $url .= "?site={$_["lang"]}"; if (isset($_["module"]) && $_["module"]) { $url .= "/{$_["module"]}"; if (isset($_["action"]) && $_["action"] && $_["action"] !== static::$defaultAction) { $url .= "/{$_["action"]}"; if (isset($_["extra"]) && $_["extra"]) { $url .= "/" . implode("/", $_["extra"]); } } } if (isset($_["data"]) && $_["data"]) { $url .= "&data=" . implode("/", $_["data"]); } if (isset($_["hash"]) && $_["hash"]) { $url .= "#" . $_["hash"]; } return $url; }
/** * Metoda pobierająca nazwe klasy widoku. * * @access public * @return string nazwa widoku */ public function getView() { $class = "\\" . Config::getOne("app") . "\\View\\" . $this->module; if (!class_exists($class)) { $class = "\\Ker\\MVCP\\AView"; } return $class; }