-
Notifications
You must be signed in to change notification settings - Fork 4
Open
Description
Hola, antes que nada felicitarte pues me está siendo de gran ayuda antes de dar el salto a Laravel, comprender todo de forma nativa, ya que vengo de PHP Legacy.
He realizado unos cambios en Core.php (realmente en mi trabajo es diferente pues yo uso namespaces y cambia un poco por lo que lo he adaptado para tu código) espero que te sea de utilidad.
Este código lo que hace es controlar el caso que la url no esté bien escrita o que el metodo o clase no se encuentre. Lo que hace es extender de la clase control para poder acceder al método load_view y cargar la vista de página no encontrada.
<?php
class Core extends Control
{
// indice[0] va ser igual al controlador
// indice[1] va ser igual al metodo del controlador
// indice[2] va ser igual a los parametros que iran como argumento en los metodos
protected $controller;
protected $method;
protected $parameters = [];
public function __construct()
{
$url = $this->getUrl();
// Controller Load
if (file_exists('../app/controllers/' . ucwords($url[0]) . '.php')) {
$this->controller = ucwords($url[0]);
unset($url[0]);
require_once '../app/controllers/' . $this->controller . '.php';
$this->controller = new $this->controller;
} else {
$this->load_view('404');
exit;
}
// Method Load
if (isset($url[1])) {
if (method_exists($this->controller, $url[1])) {
$this->method = $url[1];
unset($url[1]);
} else {
$this->load_view('404');
exit;
}
}
// Parameters Load
$this->parameters = $url ? array_values($url) : [];
// Call
call_user_func_array([$this->controller, $this->method], $this->parameters);
//var_dump($this->parameters);
}
public function getUrl()
{
if (isset($_GET['url'])) {
$url = rtrim($_GET['url'], '/');
$url = filter_var($url, FILTER_SANITIZE_URL);
$url = explode('/', $url);
return $url;
}
}
}
Metadata
Metadata
Assignees
Labels
No labels