Application.php (4031B)
1 <?php 2 3 /** 4 * Class Application 5 * The heart of the application 6 */ 7 class Application 8 { 9 /** @var mixed Instance of the controller */ 10 private $controller; 11 12 /** @var array URL parameters, will be passed to used controller-method */ 13 private $parameters = array(); 14 15 /** @var string Just the name of the controller, useful for checks inside the view ("where am I ?") */ 16 private $controller_name; 17 18 /** @var string Just the name of the controller's method, useful for checks inside the view ("where am I ?") */ 19 private $action_name; 20 21 /** 22 * Start the application, analyze URL elements, call according controller/method or relocate to fallback location 23 */ 24 public function __construct() 25 { 26 // create array with URL parts in $url 27 $this->splitUrl(); 28 29 // creates controller and action names (from URL input) 30 $this->createControllerAndActionNames(); 31 // does such a controller exist ? 32 if (file_exists(Config::get('PATH_CONTROLLER') . $this->controller_name . '.php')) { 33 34 // load this file and create this controller 35 // example: if controller would be "car", then this line would translate into: $this->car = new car(); 36 require Config::get('PATH_CONTROLLER') . $this->controller_name . '.php'; 37 $this->controller = new $this->controller_name(); 38 39 // check for method: does such a method exist in the controller ? 40 if (method_exists($this->controller, $this->action_name)) { 41 if (!empty($this->parameters)) { 42 // call the method and pass arguments to it 43 call_user_func_array(array($this->controller, $this->action_name), $this->parameters); 44 } else { 45 // if no parameters are given, just call the method without parameters, like $this->index->index(); 46 $this->controller->{$this->action_name}(); 47 } 48 } else { 49 echo "test"; 50 // load 404 error page 51 require Config::get('PATH_CONTROLLER') . 'ErrorController.php'; 52 $this->controller = new ErrorController; 53 $this->controller->error404(); 54 } 55 } else { 56 // load 404 error page 57 require Config::get('PATH_CONTROLLER') . 'ErrorController.php'; 58 $this->controller = new ErrorController; 59 $this->controller->error404(); 60 } 61 } 62 63 /** 64 * Get and split the URL 65 */ 66 private function splitUrl() 67 { 68 if (Request::get('url')) { 69 70 // split URL 71 $url = trim(Request::get('url'), '/'); 72 $url = filter_var($url, FILTER_SANITIZE_URL); 73 $url = explode('/', $url); 74 75 // put URL parts into according properties 76 $this->controller_name = isset($url[0]) ? $url[0] : null; 77 $this->action_name = isset($url[1]) ? $url[1] : null; 78 79 // remove controller name and action name from the split URL 80 unset($url[0], $url[1]); 81 82 // rebase array keys and store the URL parameters 83 $this->parameters = array_values($url); 84 } 85 } 86 87 /** 88 * Checks if controller and action names are given. If not, default values are put into the properties. 89 * Also renames controller to usable name. 90 */ 91 private function createControllerAndActionNames() 92 { 93 // check for controller: no controller given ? then make controller = default controller (from config) 94 if (!$this->controller_name) { 95 $this->controller_name = Config::get('DEFAULT_CONTROLLER'); 96 } 97 98 // check for action: no action given ? then make action = default action (from config) 99 if (!$this->action_name OR (strlen($this->action_name) == 0)) { 100 $this->action_name = Config::get('DEFAULT_ACTION'); 101 } 102 103 // rename controller name to real controller class/file name ("index" to "IndexController") 104 $this->controller_name = ucwords($this->controller_name) . 'Controller'; 105 } 106 }