Gracias GastorV y masterpuppet una vez mas.
Os explico como es mi miniframework, es sencillito.
Mi archivo index a traves del cual pasan todas las urls de mi aplicacion. Todas las urls son capturadas mediante mod_rewrinting y dirigidas de esta manera: RewriteRule (.*)$ indice.php?enlace=$1 [QSA,L]
Código PHP:
<?php
ini_set('display_errors', 1);
define('DS', DIRECTORY_SEPARATOR);
define('ROOT', realpath(dirname(__FILE__)) . DS);
define('APP_PATH', ROOT . 'application' . DS);
try{
require_once APP_PATH . 'Configuracion.php';
require_once APP_PATH . 'Peticion.php';
require_once APP_PATH . 'Lanzador.php';
require_once APP_PATH . 'Controlador.php';
require_once APP_PATH . 'Modelo.php';
require_once APP_PATH . 'Vista.php';
require_once APP_PATH . 'Registro.php';
require_once APP_PATH . 'Database.php';
require_once APP_PATH . 'Session.php';
require_once APP_PATH . 'Hash.php';
Session::init();
Lanzador::run(new Peticion);
}catch( MiExcepcion $e ){
$e->mostrarError();
}catch(Exception $e){
echo $e->getMessage();
}
?>
Mi archivo Peticion.php
Código PHP:
<?php
class Peticion
{
private $_controlador;
private $_accion;
private $_argumentos;
public function __construct()
{
if( isset($_GET['enlace']) ){
$enlace = filter_input(INPUT_GET, 'enlace', FILTER_SANITIZE_URL);
$enlace = explode('/', $enlace);
$enlace = array_filter($enlace);
$this->_controlador = strtolower(array_shift($enlace));
$this->_accion = strtolower(array_shift($enlace));
$this->_argumentos = $enlace;
if( empty( $this->_controlador ) ){
$this->_controlador = CONTROLADOR_POR_DEFECTO;
}
if( empty( $this->_accion ) ) {
$this->_accion = ACCION_POR_DEFECTO;
}
if(!isset($this->_argumentos)){
$this->_argumentos = array();
}
}
}
/* metodos get */
}
Mi archivo lanzador que ejecuta el controlador apropiado:
Código PHP:
<?php
class Lanzador
{
public static function run(Peticion $peticion)
{
$controlador = $peticion->getControlador() . 'Controlador';
$rutaControlador = DIR_CONTROLADORES . $controlador . '.php';
$accion = $peticion->getAccion();
$argumentos = $peticion->getArgumentos();
if( is_readable( $rutaControlador ) ){
require_once $rutaControlador;
$registro = new claseRegistro();
>>>>>>> QUIZAS AQUI y pasarselo a los controladores como un parametro opcional <<<<<
$controlador = new $controlador($peticion, $registro);
if(is_callable(array($controlador, $accion))){
if( empty($argumentos) == true ){
call_user_func(array($controlador, $accion));
}
else{
call_user_func_array(array($controlador, $accion), array( $argumentos ) ) ;
}
exit();
}
}
header('Location: '.PAGINA_ERROR_404);
}
}
?>
Quizas aqui seria un buen lugar para incluir el codigo anterior con un include y poder pasar la clase EntityManager a los controladores, como un tercer parametro opcional.
A ver, que segun voy pensando, yo antes trabajaba con modelos, en los controladores tenia atributos/propiedades donde guardaba una instancia del modelo que iba a utilizar en ese controlador, para hacer las consultas a la base de datos y traerme registro o registros.
Pero ahora ya no voy a tener mas modelos que se conectan individualmente a la base de datos, voy a trabajar con las entidades de doctrine, entonces, simplemente necesito tener el EntityManager disponible en los controladores, y a traves de este, como ya lo he configurado donde tiene que encontrar las clases de las entidades, pues a traves de este ya ¿ puedo utilizar las entidades ? ¿ o como ?
No se si me voy mucho o mas o menos estoy acertado, ¿ es asi ?