I have a Symfony2 bundle where I am utilizing a dynamic selection of EntityManagers based on the subdomain in addition to a fixed EM for general settings, etc. For example, a user lands on dev.mydomain.com and is presented with a login screen that pulls information from a default database containing site title, colors, etc. The login script, however, references the dev database which contains the users and data for that subdomain. Similarly, when logging into other.mydomain.com, the login references the other database. This all works great and users are validated against their appropriate databases.
The issue I'm encountering is when I create a "new user form" using Symfony's Form system. I utilize a Many to Many relationship for user roles as outlined by The Book, but can't find a way to specify which EntityManager is used, causing it to look for the relationships against the default EntityManager.
Controller/UserController.php
public function addAction(Request $request) {
$us = new User();
// ORM Connection name stored in session from the login screen
$em = $this->getDoctrine()->getManager(
$request->getSession()->get('database')
);
$form = $this->createForm(
new UserType($em), $us
);
return $this->render(
'MyBundle:User:create.html.twig',
array( 'form' => $form->createView() )
);
}
Entity/User.php
/**
* @var string
*
* @ORM\ManyToMany(targetEntity="Role", inversedBy="users", cascade={"persist"})
*/
private $roles;
config.yml
doctrine:
dbal:
connections:
default:
driver: "%database_driver%"
host: "%database_host%"
port: "%database_port%"
dbname: "%database_name%"
user: "%database_user%"
password: "%database_password%"
charset: UTF8
dev:
driver: "%dev.database_driver%"
host: "%dev.database_host%"
port: "%dev.database_port%"
dbname: "%dev.database_name%"
user: "%dev.database_user%"
password: "%dev.database_password%"
charset: UTF8
orm:
default_entity_manager: default
auto_generate_proxy_classes: "%kernel.debug%"
entity_managers:
default:
connection: default
mappings:
MyBundle: ~
dev:
connection: dev
mappings:
MyBundle: ~
Is there a way to pass a specified EntityManager into createForm or FormBuilder to be utilized by the built-in ManyToMany ORM annotation? To be clear, the rest of the form works appropriately, adding the user to the desired EntityManager -- it's just the Roles field that's still referencing default.