Este foro ya no está activo, así que no puedes publicar nuevas preguntas ni responder a las preguntas existentes.

Symfony2 - Conexiones dinámicas a Multiples Bases de Datos

19 de octubre de 2014

Hola, en la aplicación que estamos realizando en Symfony2 los clientes hacen el login contra un servidor LDAP y en función de la organización a la que pertenezcan se deben conectar a una base de datos específica para su organización. Todas las Bases de datos tendrán la misma estructura, es decir, tan solo es necesaria la utilización de un Entity Manager.

El caso es que no se como hacer para que según la información que reciba del servidor LDAP la aplicación se conecte a la base de datos que corresponde.

He estado investigando sobre el tema un poco y lo único interesante que he encontrado es este tema de StackOverflow:

http://stackoverflow.com/questions/6409167/symfony-2-multiple-and-dynamic-database-connection

No se si es la mejor manera de conseguir esto y me gustaría saber que opináis vosotros. Espero que me podáis ayudar.

Un saludo a todos.


Respuestas

#1

Hola, tengo un problema similar al hacer el login bajo el ldap y este retorname ciertos valores proceso una conexion dinamica por ejemplo.

$configs = new \Doctrine\DBAL\Configuration();
 
$connectionParams = array(
    'dbname' => 'dbname',
    'user' => $user,
    'password' => $password,
    'host' => 'host',
    'driver' => 'oci8',
);
 
$em = DriverManager::getConnection($connectionParams, $configs);

Con esta conexión puedo ejecutar consultas sql, pero consultas dql no!, por que lo supongo que es necesario crear un nuevo entity manager con los nuevos parámetros de conexión, he estado intentando algo como esto:

$cache = new \Doctrine\Common\Cache\ArrayCache;
 
$config= new \Doctrine\ORM\Configuration;
$config->setMetadataCacheImpl($cache);
 
$driverImpl = $config->newDefaultAnnotationDriver($ruta);
 
$config->setMetadataDriverImpl($driverImpl);
$config->setQueryCacheImpl($cache);
 
$dir = $this->container->getParameter('kernel.cache_dir').""."/doctrine/orm/Proxies";
 
$config->setProxyDir($dir);
$config->setProxyNamespace('Proxies');
$config->setAutoGenerateProxyClasses(true);
 
$em = EntityManager::create($em, $config, $em->getEventManager())

Pero obtengo el error de "Unknown Entity namespace alias" al intentar ejecutar una consulta dql, supongo que se me escapa algo, que camino tomaste tu?, como trabajaste con la nueva conexión y el entity manager? si pudieras comentarlo te lo agradecería.

Saludos a Todos!

@kmiloxvii

22 octubre 2014, 10:27
#2

MI caso no es el mismo. Yo hago el login contra el LDAP para obtener toda la información del usuario (datos usuario, empresa, Roles, categorías...) de la jerarquía del mismo. Pero una vez autenticado el usuario todas las consultas se hacen a una base de datos relacional mysql.

Está claro que no es el mismo caso que el tuyo. Hasta donde he podido entender ¿estás intentando hacer consultas DQL contra el LDAP?

No se si te servirá de ayuda, pero para gestionar el login contra el LDAP he utilizado el bundle:

imag/ldap-bundle

Tienes toda la información en el siguiente enlace

@javiermadueno

22 octubre 2014, 20:16