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

FOSUser Symfony2 multi base

3 de noviembre de 2015

Hola, a ver si ustedes pasaron por el mismo tema.

Actualmente uso FOSUser con Symfony2, el tema es que no quiero replicar el programa en 20 mil directorios, lo que intento hacer es lo siguiente:

Tengo una función que captura la url con la que entra el usuario y tomo la primer parte de la url y esa es la base de datos que va a usar ese usuario.

www.ejemplo.com              www    seria la base de datos 
ramon.ejemplo.com            ramon  seria la base de datos etc...

En mi config tengo todo configurado y funcionando bien. En el resto de la aplicación lo resolví pasando un parámetro a getRepository y asi indicarle con qué entity manager debe trabajar.

$repository = $this->getDoctrine()->getRepository('AppBundle:Sellers', Core::getBase());

Donde getBase es mi función que toma la primer parte de la url y asi se que base utilizar .....

El tema es que no encuentro la forma de hacer lo mismo en FOSUser. Pregunté al creador de FOSUser y no me entiende, el o ellos dicen que puedo definir el entity manager en el archivo de configuración, cosa que en mi caso no me sirve

Alguna idea ???


Respuestas

#1

Si no te entienden, díles que estás desarrollando una "multi-tenant architecture", que es como se llama en inglés lo que estás haciendo.

En esta discusión (¡del año 2011!) se habla sobre posibles soluciones multi-tenant con el bundle FOSUserBundle.

@javiereguiluz

3 noviembre 2015, 22:42
#2

Si todas las respuestas a ese tipo de preguntas no vi una respuesta que digan: "aaahhhh si esto se hace así". La gente pone su solución mágica y realmente no saben si funciona etc.

La verdad no entiendo mucho la soluciones mágicas que ponen. Uno dice de modificar dinámicamente el archivo config etc. etc.. ni entiendo lo que dice....

¿Existe algún Bundle mejor que FOSUser ??

Saludos

@xub

4 noviembre 2015, 11:39
#3

Existe este bundle multi-tenancy-bundle que a lo mejor puedes utilizar o si no, al menos puedes coger ideas.

Personalmente no se cómo se podría hacer esto, pero quizás una solución simple podría valerte. Ten en cuenta que en Symfony se lanzan un montón de eventos durante la ejecución de la aplicación. Por ejemplo, en el bundle EasyAdminBundle tenemos un listener llamado RequestPostInitializeListener que escucha todas las peticiones y añade atributos especiales a la petición que luego usamos para ejecutar nuestras tareas.

A lo mejor tu podrías definir un listener para todas las peticiones y añadir como atributo el nombre de la base de datos o incluso el entity manager sobre el que se deben realizar las consultas a la base de datos.

@javiereguiluz

4 noviembre 2015, 11:53