我有一个获得当前登录用户的服务,该服务仅在开发环境中有效。
问题似乎是每当我更改Twig模板并刷新时我都会收到错误:
Error: Call to a member function getUser() on null
如果我刷新页面,一切正常,直到我再次更新Twig模板。这显然使得开发非常缓慢,因为我不断刷新页面。
到目前为止我所做的事情: -
有没有人有任何想法可能导致问题?
services.yml
myservice:
class: AppBundle\Services\MyService
arguments: ["@doctrine.orm.entity_manager", "@security.token_storage"]
MyService.php
<?php
namespace AppBundle\Services;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
class MyService
{
private $em;
private $token;
public function __construct($entityManager, TokenStorageInterface $tokenStorage)
{
$this->em = $entityManager;
$this->token = $tokenStorage->getToken();
}
public function doSomething()
{
$user_id = $this->token->getUser()->getID();
return;
}
}
树枝模板
{{ myservice.doSomething }}
注意: 这是仍会导致问题的简单代码
答案 0 :(得分:5)
我不确定,但在我看来,你的类应该维护一个指向tokenStorage类的指针,而不是令牌本身(因为这可能会改变)。您的服务将如下所示:
class MyService
{
private $em;
private $tokenStorage;
public function __construct($entityManager, TokenStorageInterface $tokenStorage)
{
$this->em = $entityManager;
$this->tokenStorage = $tokenStorage;
}
public function doSomething()
{
$user_id = $this->tokenStorage->getToken()->getUser()->getID();
return;
}
}