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
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
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
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