服务中的 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;
}
}
我想设置一个服务来让用户登录。这个服务被另一个服务使用,这个服务使用用户名将其设置为评论的作者。我遇到的问题是,由于 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;
}
}