core/FrontController.php
El FrontController es el que recibe todas las peticiones, incluye algunos ficheros, busca el controlador y llama a la acción que corresponde.
<?php
class FrontController
{
static function main()
{
//Incluimos algunas clases:
require 'core/Config.php'; //de configuracion
require 'core/DBManager.php'; //PDO con singleton
require 'core/View.php'; //Mini motor de plantillas
require 'config.php'; //Archivo con configuraciones.
//Con el objetivo de no repetir nombre de clases
// nuestros controladores terminaran todos en _Controller.
//Por ej, la clase controladora Libros, será Libros_Controller
//Formamos el nombre del Controlador o en su defecto
// tomamos que es el de Libros_Controller
$controller = $config->get('DEFAULT_CONTROLLER');
if(! empty($_GET['controller']))
$controller = $_GET['controller'];
//Lo mismo sucede con las acciones, si no hay accion
// tomamos index como accion
$action = $config->get('DEFAULT_ACTION');
if(! empty($_GET['action']))
$action = $_GET['action'];
$controller .= "_Controller";
$controller_path = $config->get('CONTROLLERS_FOLDER') .
$controller . '.php';
//Incluimos el fichero que contiene nuestra clase controladora solicitada
if (!is_file($controller_path))
throw new Exception('El controlador no existe ' .
$controller_path . ' - 404 not found');
require $controller_path;
//Si no existe la clase que buscamos y su método
// mostramos un error
if (!is_callable(array($controller, $action)))
throw new Exception($controller . '->' . $action . ' no existe');
//Si todo esta bien, creamos una instancia del controlador
// y llamamos a la accion
$controller = new $controller();
$controller->$action();
}
}