Ver Mensaje Individual
  #10 (permalink)  
Antiguo 06/04/2012, 04:26
chemajmb
 
Fecha de Ingreso: enero-2012
Ubicación: España
Mensajes: 150
Antigüedad: 12 años, 3 meses
Puntos: 0
Respuesta: Ordenando Repositories en Doctrine y otras dudas doctrine

Buenas,

A ver, varias cosas:
1º.- He hecho un metodo en los controladores para escribir menos codigos en las llamadas al contenedor.
Código PHP:
protected function get($nombre)
    {
        return 
$this->_contenedor->get($nombre);
    } 
Asi en los controladores puedo hacer llamadas como en el ejemplo
$product = $this->get('product_manager')->findOneBy('slug', 'my-custom-product');
en vez de
$product = $this->_container->get('product_manager')->findOneBy('slug', 'my-custom-product');
Bien, esto es sencillo y una tonteria. Pero lo comento por si acaso.

2º.-
Ahora vamos con algo mas interesante:
Antes ejecutaba el lanzador de doctrine y guardaba el em por algun sitio. Ahora que el em lo tengo guardado/definido en el contenedor. Me gustaria saber exactamente como tengo que ejecutar el lanzador de doctrine.
Mi clase contenedor
Código PHP:
Ver original
  1. <?php
  2. require_once DIR_LIBRERIAS_PRINCIPAL . 'pimple' . DS . 'Pimple.php';
  3. require_once DIR_MODELOS . 'manejadores' . DS . 'categoriaManejador.php';
  4.  
  5. class Contenedor extends Pimple
  6. {
  7.     public function __construct()
  8.     {
  9.         $this['parametros_bd'] = array( 'driver' => 'pdo_mysql',
  10.                                         'user' => DB_USER,
  11.                                         'password' => DB_PASS,
  12.                                         'dbname' => DB_NAME );
  13.         $this['manejador_entidad_config'] = \Doctrine\ORM\Tools\Setup::createAnnotationMetadataConfiguration( array( DIR_ENTIDADES ), true);
  14.         $this['clase_producto'] = 'entidades\producto';
  15.         $this['clase_categoria'] = 'entidades\categoria';
  16.         $this['manejador_entidad'] = $this->share(function ($c) {
  17.             return \Doctrine\ORM\EntityManager::create($c['parametros_bd'], $c['manejador_entidad_config']);
  18.         });
  19.         $this['manejador_producto'] = $this->share(function ($c) {
  20.             return new productoManejador($c['manejador_entidad'], $c['clase_producto']);
  21.         });
  22.         $this['manejador_categoria'] = $this->share(function ($c) {
  23.             return new categoriaManejador($c['manejador_entidad'], $c['clase_categoria']);
  24.         });
  25.     }
  26. }
  27. ?>

He escrito un poco mas de lo que tu me pusiste masterpuppet y me han surgido unas dudas:
¿ Como queda mi DoctrineBootstrap ahora ?
Antes lo tenia asi:
Código PHP:
Ver original
  1. <?php
  2.     function DoctrineLanzador(){
  3.    
  4.         require_once 'Doctrine/Common/ClassLoader.php';
  5.         $loader = new \Doctrine\Common\ClassLoader("Doctrine");
  6.         $loader->register();
  7.        
  8.         $classLoader = new \Doctrine\Common\ClassLoader('Entidades', DIR_MODELOS );
  9.         $classLoader->register();
  10.        
  11.         $dbParams = array(
  12.             'driver' => 'pdo_mysql',
  13.             'user' => DB_USER,
  14.             'password' => DB_PASS,
  15.             'dbname' => DB_NAME
  16.         );
  17.         $path = array( DIR_ENTIDADES );
  18.         $config = \Doctrine\ORM\Tools\Setup::createAnnotationMetadataConfiguration($path, true);
  19.        
  20.         $em = \Doctrine\ORM\EntityManager::create($dbParams, $config);
  21.  
  22.         return $em;
  23.     }
  24.  
  25. ?>

Ahora introdujendo la clase contenedor ¿ deberia dejarlo asi ?
Código PHP:
Ver original
  1. <?php
  2.     function DoctrineLanzador(){
  3.    
  4.         require_once 'Doctrine/Common/ClassLoader.php';
  5.         $loader = new \Doctrine\Common\ClassLoader("Doctrine");
  6.         $loader->register();
  7.        
  8.         $classLoader = new \Doctrine\Common\ClassLoader('Entidades', DIR_MODELOS );
  9.         $classLoader->register();
  10.        
  11.     }
  12.  
  13. ?>

Y ¿ deberia en el bootstrap de mi aplicacion ejecutar doctrinelanzador y luego instanciar el contenedor y guardarlo en el controlador que ejecute ?
Código PHP:
Ver original
  1. ...
  2. DoctrineLanzador();
  3. $container   = new Container();
  4. $controlador = new $controlador($peticion, $container);
  5. ...

Última edición por chemajmb; 06/04/2012 a las 12:01