如何为FOS-UserManager使用Symfony2服务容器

时间:2014-01-24 23:10:08

标签: symfony dependency-injection fosuserbundle

我的问题是我是Symfony Noobie。

我有FOSUserBundle,我只想用这段代码访问UserManager。

$userManager = $container->get('fos_user.user_manager');

但它不起作用。我的错误信息是:

enter image description here

我尝试使用控制台命令来查看服务是否声明的天气: php app / console container:debug但声明/注册了服务'fos_user.user_manager'。

我是否有可能忘记使用服务容器?

问候 迈克尔

PS:这是控制器类的完整代码:

    <?php

namespace Main\UserBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use FOS\UserBundle\Model\UserManagerInterface;

class ProfileController extends Controller
{
    /**
     * @Route("/listProfile")
     * @Template()
     */
    public function listProfileAction()
    {
       $user = $container->get('fos_user.user_manager');


        return array('user' => $user);

    }

1 个答案:

答案 0 :(得分:2)

您需要使用$this->container而不是当前正在调用的局部变量来调用类属性“container”。

下一个问题是你只是在调用用户管理器而不是实际用户。

要获得当前用户,您应该使用...

$user = $this->container->get('security.context')->getToken()->getUser();

同时

在您展开Symfony\Bundle\FrameworkBundle\Controller\Controller时,您也可以使用$this->get('something.something'),但这只是$this->container->get('something.something')方法的快捷方式(请参阅:Controller source)。扩展$this->get()时无法使用ContainerAware

出于某种原因,我将代码sample发疯了....