core.php
<?php
/*
* APP CORE CLASS
* Creates URL & Loads Core Controller
* URL Format - /controller/method/param1/param2
*/
class Core {
// Set Defaults
protected $currentController = 'Pages'; // Default controller
protected $currentMethod = 'index'; // Default method
protected $params = []; // Set initial empty params array
public function __construct(){
$url = $this->getUrl();
// Look in controllers folder for controller
if(!is_null($url)) {
if(file_exists('../app/controllers/'.ucwords($url[0]).'.php')){
// If exists, set as controller
$this->currentController = ucwords($url[0]);
// Unset 0 index
unset($url[0]);
}
}
// Require the current controller
require_once('../app/controllers/' . $this->currentController . '.php');
// Instantiate the current controller
$this->currentController = new $this->currentController;
// Check if second part of url is set (method)
if(isset($url[1])){
// Check if method/function exists in current controller class
if(method_exists($this->currentController, $url[1])){
// Set current method if it exsists
$this->currentMethod = $url[1];
// Unset 1 index
unset($url[1]);
}
}
// Get params - Any values left over in url are params
$this->params = $url ? array_values($url) : [];
// Call a callback with an array of parameters
$r = new ReflectionMethod($this->currentController, $this->currentMethod);
$argCount = $r->getNumberOfRequiredParameters();
if($argCount == count($this->params)) {
call_user_func_array([$this->currentController, $this->currentMethod], $this->params);
} else {
die("Arg count incorrect");
}
}
// Construct URL From $_GET['url']
public function getUrl(){
if(isset($_GET['url'])){
$url = rtrim($_GET['url'], '/');
$url = filter_var($url, FILTER_SANITIZE_URL);
$url = explode('/', $url);
return $url;
}
}
}