Symfony 服务中的Simfony2服务试图调用方法“;获得;
我想设置一个服务来让用户登录。此服务用于另一个使用用户名将其设置为注释作者的服务。我遇到的问题是,由于get语句,我无法将getloggedUSer函数初始化。security.context已在Symfony2.6中更新,我希望按照此处的建议使用它 我得到的错误是: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”吗 包含我要使用的函数
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;
}
}