Enrutamiento CMS en MVC
Estoy creando mi propio framework MVC en PHP como un medio para aprender programación más avanzada. Tengo el marco operativo en funcionamiento, pero tengo un problema relacionado con el método de enrutamiento actual. Quiero que el marco sea compatible con un CMS de fondo para complementar el sitio web de front-end. El problema es que mi estructura de enrutamiento funciona así:mywebsite.com/controller/method/id
El motor de enrutamiento ordena la información en una matriz como esta
segments 0 => controller, 1 => method, 2 => id
Ahora mismo, si visito mywebsite.com/projects, me lleva a lo que he configurado como una página de administración. No solo quiero que esto sea accesible solo desde mywebsite.com/admin/projects, quiero que mywebsite.com/projects me lleve a la interfaz.
Así que si quiero visitarmywebsite.com/projects
Me gustaría que renderice el controlador "frontal", presionando "proyectos" en el método. Si yo visitomywebsite.com/admin/projects
Me gustaría cargar el controlador de proyectos.
Aquí está la clase de enrutamiento actual en su totalidad de la siguiente manera.
<?php
class Request {
//url domain.com/controller/method/other
//holds url segments 0 => controller, 1 => method, 2 => other, etc
public $segments;
function __construct() {
$this->parse_globals();
}
function parse_globals(){
//$uri = preg_replace("|/(.*)|", "\\1", str_replace("\\", "/", $_SERVER['REQUEST_URI']));
$uri = (empty($_GET['rt'])) ? '' : $_GET['rt'];
$this->segments = array_filter(explode('/', $uri));
if (in_array("admin", $this->segments)) {
array_shift($this->segments);
}
print_r($this->segments);
//remove index php
if( reset($this->segments) == 'index.php') {
array_shift ($this->segments);
}
}
function controller(){
return $this->segment(0);
}
function method(){
return $this->segment(1);
}
function param( $str ){
return isset($_REQUEST[$str]) ? $_REQUEST[$str] : false;
}
function segment( $no ){
return isset($this->segments[$no]) ? $this->segments[$no] : false;
}
}