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<?php
require_once DIR_LIBRERIAS_PRINCIPAL . 'pimple' . DS . 'Pimple.php';
require_once DIR_MODELOS . 'manejadores' . DS . 'categoriaManejador.php';
class Contenedor extends Pimple
{
public function __construct()
{
$this['parametros_bd'] = array( 'driver' => 'pdo_mysql', 'user' => DB_USER,
'password' => DB_PASS,
'dbname' => DB_NAME );
$this['manejador_entidad_config'] = \Doctrine\ORM\Tools\Setup
::createAnnotationMetadataConfiguration( array( DIR_ENTIDADES
), true); $this['clase_producto'] = 'entidades\producto';
$this['clase_categoria'] = 'entidades\categoria';
$this['manejador_entidad'] = $this->share(function ($c) {
return \Doctrine\ORM\EntityManager::create($c['parametros_bd'], $c['manejador_entidad_config']);
});
$this['manejador_producto'] = $this->share(function ($c) {
return new productoManejador($c['manejador_entidad'], $c['clase_producto']);
});
$this['manejador_categoria'] = $this->share(function ($c) {
return new categoriaManejador($c['manejador_entidad'], $c['clase_categoria']);
});
}
}
?>
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<?php
function DoctrineLanzador(){
require_once 'Doctrine/Common/ClassLoader.php';
$loader = new \Doctrine\Common\ClassLoader("Doctrine");
$loader->register();
$classLoader = new \Doctrine\Common\ClassLoader('Entidades', DIR_MODELOS );
$classLoader->register();
'driver' => 'pdo_mysql',
'user' => DB_USER,
'password' => DB_PASS,
'dbname' => DB_NAME
);
$path = array( DIR_ENTIDADES
); $config = \Doctrine\ORM\Tools\Setup::createAnnotationMetadataConfiguration($path, true);
$em = \Doctrine\ORM\EntityManager::create($dbParams, $config);
return $em;
}
?>
Ahora introdujendo la clase contenedor ¿ deberia dejarlo asi ?
Código PHP:
Ver original<?php
function DoctrineLanzador(){
require_once 'Doctrine/Common/ClassLoader.php';
$loader = new \Doctrine\Common\ClassLoader("Doctrine");
$loader->register();
$classLoader = new \Doctrine\Common\ClassLoader('Entidades', DIR_MODELOS );
$classLoader->register();
}
?>
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...
DoctrineLanzador();
$container = new Container();
$controlador = new $controlador($peticion, $container);
...