splitUrl(); // creates controller and action names (from URL input) $this->createControllerAndActionNames(); // does such a controller exist ? if (file_exists(Config::get('PATH_CONTROLLER') . $this->controller_name . '.php')) { // load this file and create this controller // example: if controller would be "car", then this line would translate into: $this->car = new car(); require Config::get('PATH_CONTROLLER') . $this->controller_name . '.php'; $this->controller = new $this->controller_name(); // check for method: does such a method exist in the controller ? if (method_exists($this->controller, $this->action_name)) { if (!empty($this->parameters)) { // call the method and pass arguments to it call_user_func_array(array($this->controller, $this->action_name), $this->parameters); } else { // if no parameters are given, just call the method without parameters, like $this->index->index(); $this->controller->{$this->action_name}(); } } else { header('location: ' . Config::get('URL') . 'error'); } } else { header('location: ' . Config::get('URL') . 'error'); } } /** * Get and split the URL */ private function splitUrl() { if (Request::get('url')) { // split URL $url = trim(Request::get('url'), '/'); $url = filter_var($url, FILTER_SANITIZE_URL); $url = explode('/', $url); // put URL parts into according properties $this->controller_name = isset($url[0]) ? $url[0] : null; $this->action_name = isset($url[1]) ? $url[1] : null; // remove controller name and action name from the split URL unset($url[0], $url[1]); // rebase array keys and store the URL parameters $this->parameters = array_values($url); } } /** * Checks if controller and action names are given. If not, default values are put into the properties. * Also renames controller to usable name. */ private function createControllerAndActionNames() { // check for controller: no controller given ? then make controller = default controller (from config) if (!$this->controller_name) { $this->controller_name = Config::get('DEFAULT_CONTROLLER'); } // check for action: no action given ? then make action = default action (from config) if (!$this->action_name OR (strlen($this->action_name) == 0)) { $this->action_name = Config::get('DEFAULT_ACTION'); } // rename controller name to real controller class/file name ("index" to "IndexController") $this->controller_name = ucwords($this->controller_name) . 'Controller'; } }