如何在FOSUserBundle控制器中获取实体管理器的实例

时间:2014-05-23 03:45:24

标签: symfony symfony-2.3

我在Symfony 2.3中使用FOSUserBundle,我创建了一个用于存储用户配置文件的附加表,在某些时候,我需要访问实体管理器以持久化并将来自配置文件表单的数据刷新到配置文件表,但是我在尝试获取实体管理器的实例时遇到了问题。

有什么想法吗?

谢谢!

3 个答案:

答案 0 :(得分:2)

要使用FOSUserBundle编辑用户的个人资料,您必须创建一个新的ProfileController,它扩展了FOSUserBundle的ProfileController。

现在,您可以覆盖FOSUserBundle的方法。

开始的例子:

<?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 Acme\UserBundle\Controller;

use FOS\UserBundle\Model\UserInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\Security\Core\Exception\AccessDeniedException;
use FOS\UserBundle\Controller\ProfileController 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
   }
}

答案 1 :(得分:2)

您可以通过以下方式访问Doctrine服务:

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

答案 2 :(得分:1)

FOSUserBundle的控制器从Symfony\Component\DependencyInjection\ContainerAware延伸。因此,您可以访问Symfony\Component\DependencyInjection\ContainerInterface$this->container。使用此容器,您可以访问Doctrine和EntityManager:

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