Ver Mensaje Individual
  #11 (permalink)  
Antiguo 23/03/2012, 15:12
chemajmb
 
Fecha de Ingreso: enero-2012
Ubicación: España
Mensajes: 150
Antigüedad: 12 años, 9 meses
Puntos: 0
Respuesta: Empezando con Doctrine 2.2.1

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 ?

Última edición por chemajmb; 23/03/2012 a las 15:51