/** * Retourne une valeur du tableau config contenu dans le registre * @return mixed * @param $key String */ function _c($key) { $cfg = Registery::get('config'); if (is_array($cfg)) { if (isset($cfg[$key])) { return $cfg[$key]; } } return null; }
/** * Le dispatcher qui va lancer l'action en fonction des paramètres * @return void */ public static function init() { // On stock la variable d'environnement qui vient d'apache, pour cela, placer // SetEnv Environment (development|production|test) $environment = getenv('Environment'); if ($environment === false) { $environment = 'production'; } Registery::set('environment', $environment); // configuration du site $config = (require LI_APP . '/Config/Config.php'); Registery::set('config', $config[$environment]); $config = Registery::get('config'); // configuration par default Registery::setAndMerge('config', array('default_module' => 'Front', 'default_controller' => 'Index', 'default_action' => 'Index'), true); Registery::load('routes', LI_APP . '/Config/Routes.php'); $db_config = array(); if (file_exists(LI_APP . '/Config/Database.php')) { $db_configs = (require LI_APP . '/Config/Database.php'); $db_config = $db_configs[$environment]; Registery::set('db_config', $db_config); // initialisation de la bdd if (!empty($db_config['dsn']) && !empty($db_config['user'])) { Registery::set('db', new Db($db_config['dsn'], $db_config['user'], $db_config['pass'])); } } // On construit l'objet requete qui va contenir les params d'entrées // ainsi que l'analyse de l'url pour déterminer l'app/controller/action // à utiliser $request = new Request(); $params =& $request->getParams(); Registery::set('params', $params); // On insère l'éventuel helper lié à notre application if (file_exists(LI_APP . '/Helper/Helper.php')) { require_once LI_APP . '/Helper/Helper.php'; } // si le projet contient un fichier boot dans la config if (file_exists(LI_APP . '/Config/Boot.php')) { include_once LI_APP . '/Config/Boot.php'; if (function_exists('onBoot')) { onBoot($request, $config); } } $response = self::launch($request); $response->out(); }
/** * sous la forme complet : module:controller:action|id=8&user_id=9 */ public static function selector($query) { // requête actuelle (pour compléter les éléments manquants $params = Registery::get('params'); $queryParams = array(); $tabQuery = explode('|', $query); $tabParams = explode(':', $tabQuery[0]); if (count($tabParams) == 0) { $queryParams['module'] = $params['module']; $queryParams['controller'] = $params['controller']; $queryParams['action'] = $params['action']; } elseif (count($tabParams) == 1) { $queryParams['module'] = $params['module']; $queryParams['controller'] = $params['controller']; $queryParams['action'] = $tabParams[0]; } elseif (count($tabParams) == 2) { $queryParams['module'] = $params['module']; $queryParams['controller'] = $tabParams[0]; $queryParams['action'] = $tabParams[1]; } elseif (count($tabParams) == 3) { $queryParams['module'] = $tabParams[0]; $queryParams['controller'] = $tabParams[1]; $queryParams['action'] = $tabParams[2]; } elseif (count($tabParams) == 4) { $queryParams['module'] = $tabParams[0]; $queryParams['controller'] = $tabParams[1]; $queryParams['action'] = $tabParams[2]; $queryParams['id'] = $tabParams[3]; } else { throw new Exception('Mauvais selecteur dans le lien'); } if (!empty($tabQuery[1])) { $tabVars = explode('&', $tabQuery[1]); if (!empty($tabVars)) { foreach ($tabVars as $var) { $tabVar = explode('=', $var); if ($tabVar[0] != 'module' && $tabVar[0] != 'controller' && $tabVar[0] != 'action') { $queryParams[$tabVar[0]] = $tabVar[1]; } } } } return $queryParams; }
public function init() { // On commence à virer les magic quote (beuuuuuuuuuuuurk) $this->stripslashes(); $config = Registery::get('config'); if ($config['url_handler'] == 'modrewrite') { $pathinfo = isset($_GET['pathinfo']) ? $_GET['pathinfo'] : ''; } elseif ($config['url_handler'] == 'multiviews') { if (isset($_SERVER['PATH_INFO'])) { $pathinfo = substr($_SERVER['PATH_INFO'], 1, strlen($_SERVER['PATH_INFO']) - 1); } } elseif ($config['url_handler'] == 'querystring') { if (isset($_GET['qs'])) { $pathinfo = substr($_GET['qs'], 1, strlen($_GET['qs']) - 1); } } elseif ($config['url_handler'] == 'simple') { // Do nothing ! } else { throw new \Exception('Impossible de trouver un support pour ce type d\'url'); } $urlEngineClassName = 'Mynd\\Core\\Url\\' . ucwords($config['url_handler']) . 'Url'; try { $urlEngine = new $urlEngineClassName(); $route = $urlEngine->url2params($pathinfo, $_GET); $this->params = $route['params']; $this->routeName = $route['route_name']; if (isset($this->params['pathinfo'])) { unset($this->params['pathinfo']); } } catch (Exception $e) { echo $e->getMessage(); die; } $this->params = array_merge($this->params, $_POST); // On stocke les paramètres dans le registre Registery::set('route_name', $this->routeName); Registery::set('params', $this->params); }
public function params2path($params) { if (empty($params['controller'])) { $params['controller'] = _c('default_controller'); } if (empty($params['action'])) { $params['action'] = _c('default_action'); } if (empty($params['module'])) { $params['module'] = _c('default_module'); } $routes = Registery::get('routes'); $url = null; foreach ($routes as $route) { $badparams = false; preg_match_all("/:([a-zA-Z0-9_]*)/", $route['url'], $neededParams); if (empty($route['params'])) { $route['params'] = array(); } // On vérifie pour chaque variable de l'url que la params correspondant bien // à ce qu'on a spécifié dans le tableau params $ValueParamsURL = array(); foreach ($neededParams['1'] as $p) { if (isset($params[$p])) { if (isset($route['params'][$p])) { $regexp = $route['params'][$p]; } else { $regexp = '[a-zA-Z0-9_]*'; } if (preg_match('#' . $regexp . '#i', $params[$p])) { $ValueParamsURL[$p] = $params[$p]; // Le params initiale ne correspond pas à la regexp donnée par la route } else { $badparams = true; } // le params existe dans l'url, mais pas de le tableau initial } else { $badparams = true; } } if ($badparams) { continue; } // On regroupe les paramètres de l'url et ceux de la route $tabParamsURL = array_merge($route['params'], $ValueParamsURL); // On vérifie qu'on a bien tous nos paramètres ! foreach ($tabParamsURL as $key => $value) { if (!isset($params[$key]) || $value != $params[$key]) { $badparams = true; } } if ($badparams) { continue; } // On a notre route ! $finalTabParams = $route; $finalNeededParams = $neededParams['1']; $finalParamsURL = $tabParamsURL; break; } // on vire le module si on l'a rajouté au début (pour eviter une erreur sur l'indexe null) if (is_null($params['module'])) { unset($params['module']); } // On a notre route // On met les paramètres de l'url dans l'url $url = $finalTabParams['url']; foreach ($finalNeededParams as $p) { $url = str_replace(':' . $p, $params[$p], $url); } // On ajoute les ?key=value en regardant ce qui n'a pas encore été mis $getParams = array_diff_key($params, $finalParamsURL); if (count($getParams) > 0) { $tabTempurl = array(); foreach ($getParams as $key => $value) { if (isset($value)) { if (is_array($value)) { foreach ($value as $v) { $tabTempurl[] = $key . '[]=' . urlencode($v); } } else { $tabTempurl[] = $key . '=' . urlencode($value); } } } if (count($tabTempurl)) { $url .= '?'; $url .= implode('&', $tabTempurl); } } return $url; }