服务中的 Simfony2 服务尝试调用方法 "get"

Simfony2 Service within a Service Attempted to call method "get"

我想设置一个服务来让用户登录。这个服务被另一个服务使用,这个服务使用用户名将其设置为评论的作者。我遇到的问题是,由于 get 语句,我无法初始化 getloggedUSer 函数。 security.context 已在 Symfony2.6 中更新,我想按照此处的建议使用它 http://symfony.com/blog/new-in-symfony-2-6-security-component-improvements

我得到的错误:

Attempted to call method "get" on class "Usuarios\UsersBundle\Services\UserManager".

您是要打电话给 "getloggedUser" 吗?

拥有我要使用的功能的UserManager服务:

namespace Usuarios\UsersBundle\Services;
/**
 * Class UserManager
 */
class UserManager
{
private $em;


/**
 * @param EntityManager $em
 *
 */
public function __construct(EntityManager $em)
{
    $this->em = $em;
}

/**
 * @return mixed
 */
public function getloggedUser()
{
    ###Failing Line
    $loggedUser = $this->get('security.token_storage')->getToken()->getUser();

    return $loggedUser;
}

调用 getloggedUser 函数的 PostManager 服务:

namespace Blog\BlogBundle\Services;
/**
* Class PostManager
*/
class PostManager
{
private $em;
private $formFactory;
private $um;

/**
 * @param EntityManager $em
 * @param formFactoryInterface $formFactory
 * @param UserManager $um
 */
public function __construct(EntityManager $em, FormFactoryInterface $formFactory, UserManager $um)
{
    $this->em = $em;
    $this->formFactory = $formFactory;
    $this->um = $um;
}
/**
 * Create and validate a new comment
 *
 * @param Post    $post
 * @param Request $request
 * @return FormInterface|boolean
 */
public function createComment (Post $post, Request $request)
{
    $comment = new Comment();
    $comment->setPost($post);                     
    $comment->setAuthorName($this->um->getloggedUser());### Failing Line

    $form = $this->formFactory->create(new CommentType(), $comment);
    $form->handleRequest($request);

    if ($form->isValid()) {
        $this->em->persist($comment);
        $this->em->flush();
    return true;
}
return $form;
}

"get"显然在这种情况下是不可用的。 ### 符号在实际代码中不存在,仅供参考。我的代码声明有什么问题?

这是因为您的UserManager服务定义错误。您不能在尝试时使用方法 get - 这是从提供 get 方法的 Controller class 中养成的习惯。

您需要做的是更改 UserManager 服务的定义,以便将 TokenStorage 注入 class。

services.yml

services:
    your.user.manager.service:
        class: Usuarios\UsersBundle\Services\UserManager
        arguments: [@doctrine.orm.entity_manager, @security.token_storage]

用户管理器:

class UserManager
{


    public function __construct(EntityManager $em, $tokenStorage)
    {
        $this->em = $em;
        $this->tokenStorage = $tokenStorage;
    }


    public function getloggedUser()
    {
        $loggedUser = $this->tokenStorage->getToken()->getUser();

        return $loggedUser;
    }
}