Utiliser différents Entité Gestionnaire / Connexion sur la base d'URL dans Symfony si assez facile. À la suite de la configuration du routage
connection:
pattern: /a/{connection}
defaults: { _controller: AcmeTestBundle:User:index }
le livre de recettes;
Comment travailler avec Plusieurs Gestionnaires d'entités et de Connexions
Mon contrôleur ressemblerait à quelque chose comme ceci;
class UserController extends Controller
{
public function indexAction($connection)
{
$products = $this->get('doctrine')
->getRepository('AcmeStoreBundle:Product', $connection)
->findAll()
;
..................
et je vais être en mesure de récupérer des informations de produit à partir de différents em/connexion/base de données.
Maintenant, si j'ajoute quelque chose comme cela pour mon routage;
login:
pattern: /a/{connection}/login
defaults: { _controller: FOSUserBundle:Security:login }
Comment puis-je facilement faire le login à utiliser la connexion tel que défini dans la connexion variable?
Cette configuration supposons que chaque base de données a ses propres informations de connexion utilisateur (le fos_user tableau).
Edit: mise à Jour des informations de routage
Edit2:
Je suis encore nouveau avec PHP/Symfony/Doctrine bien que, de sorte s'il vous plaît pardonnez-moi si je me trompe complètement ici. J'ai essayé de paramétrer manuellement la connexion à FOS\UserBundle\Doctrine\UserManager. Ce qui suit est le constructeur de la classe
//
use Doctrine\Common\Persistence\ObjectManager;
//
public function __construct(EncoderFactoryInterface $encoderFactory, CanonicalizerInterface $usernameCanonicalizer, CanonicalizerInterface $emailCanonicalizer, ObjectManager $om, $class)
{
parent::__construct($encoderFactory, $usernameCanonicalizer, $emailCanonicalizer);
$this->objectManager = $om;
$this->repository = $om->getRepository($class);
$metadata = $om->getClassMetadata($class);
$this->class = $metadata->getName();
}
Dans un contrôleur, on peut utiliser la méthode suivante pour modifier l'em de "testing"
$em = $this->get('doctrine')->getManager('testing');
$repository = $this->get('doctrine')->getRepository($class, 'testing')
Pour cela, j'ai modifié le code comme suit pour utiliser l'EntityManager au lieu de ObjectManager.
//
//use Doctrine\Common\Persistence\ObjectManager;
use Doctrine\ORM\EntityManager;
//
public function __construct(EncoderFactoryInterface $encoderFactory, CanonicalizerInterface $usernameCanonicalizer, CanonicalizerInterface $emailCanonicalizer, EntityManager $om, $class)
{
parent::__construct($encoderFactory, $usernameCanonicalizer, $emailCanonicalizer);
$this->objectManager = $om;
$this->repository = $om->getRepository($class);
$metadata = $om->getClassMetadata($class);
$this->class = $metadata->getName();
}
Mon application fonctionne très bien sans aucune erreur.
De la façon dont il fonctionne avec le contrôleur, j'ai essayé de changer la connexion par l'ajout d'un paramètre à cette ligne, mais il est encore à l'aide de la connexion par défaut.
$this->repository = $om->getRepository($class, 'testing');
Quoi d'autre pourrais-je manquer ici?