Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Symfony 服务中的Simfony2服务试图调用方法“;获得;_Symfony_Authentication_Service_Dependency Injection_Access Token - Fatal编程技术网

Symfony 服务中的Simfony2服务试图调用方法“;获得;

Symfony 服务中的Simfony2服务试图调用方法“;获得;,symfony,authentication,service,dependency-injection,access-token,Symfony,Authentication,Service,Dependency Injection,Access Token,我想设置一个服务来让用户登录。此服务用于另一个使用用户名将其设置为注释作者的服务。我遇到的问题是,由于get语句,我无法将getloggedUSer函数初始化。security.context已在Symfony2.6中更新,我希望按照此处的建议使用它 我得到的错误是: Attempted to call method "get" on class "Usuarios\UsersBundle\Services\UserManager". 你想叫“getloggedUser”吗 包含我要使用的函数

我想设置一个服务来让用户登录。此服务用于另一个使用用户名将其设置为注释作者的服务。我遇到的问题是,由于get语句,我无法将getloggedUSer函数初始化。security.context已在Symfony2.6中更新,我希望按照此处的建议使用它

我得到的错误是:

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
类中获得的习惯

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

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;
    }
}