/ / Comment obtenir l'instance d'Entity Manager dans le contrôleur FOSUserBundle - symfony, symfony-2.3

Comment obtenir l'instance du gestionnaire d'entités dans le contrôleur FOSUserBundle - symfony, symfony-2.3

J'utilise FOSUserBundle dans Symfony 2.3, j'ai créé une table supplémentaire pour stocker le profil utilisateur. À un moment donné, je dois accéder au gestionnaire d'entités pour persister et vider les données provenant du formulaire de profil dans la table de profil, mais j'ai des difficultés à obtenir une instance du gestionnaire d'entité.

Une idée?

Merci!

Réponses:

2 pour la réponse № 1

Pour éditer les profils des utilisateurs à l'aide de FOSUserBundle, vous devez créer un nouveau ProfileController qui étend le ProfileController de FOSUserBundle.

Ici, vous pouvez maintenant remplacer les méthodes de FOSUserBundle.

Un exemple de départ:

<?php

/*
* This file is part of the FOSUserBundle package.
*
* (c) FriendsOfSymfony <http://friendsofsymfony.github.com/>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/

namespace AcmeUserBundleController;

use FOSUserBundleModelUserInterface;
use SymfonyComponentHttpFoundationRequest;
use SymfonyComponentHttpFoundationRedirectResponse;
use SymfonyComponentSecurityCoreExceptionAccessDeniedException;
use FOSUserBundleControllerProfileController as BaseController;

/**
* Controller managing the user profile
*
* @author Christophe Coevoet <stof@notk.org>
*/
class ProfileController extends BaseController
{
public function editAction()
{
$em = $this->container->get("doctrine")->getManager();
// your code here
}
}

2 pour la réponse № 2

Vous pouvez accéder au service Doctrine de cette façon:

$em = $this->container->get("doctrine")->getManager();

1 pour la réponse № 3

Les contrôleurs du FOSUserBundle s'étendent de SymfonyComponentDependencyInjectionContainerAware. Vous avez donc accès à la SymfonyComponentDependencyInjectionContainerInterface par $this->container. Avec ce conteneur, vous pouvez accéder à la doctrine et, par conséquent, à EntityManager:

$doctrine = $this->container->get("doctrine");
$em = $doctrine->getManager();