【问题标题】:TokenStorage sometimes returns null in ServiceTokenStorage 有时会在 Service 中返回 null
【发布时间】:2015-09-15 16:00:04
【问题描述】:

我有一个获取当前登录用户的服务,它只在开发环境中的某些时间工作。

问题似乎是每当我更改 Twig 模板并刷新时都会出现错误:

Error: Call to a member function getUser() on null

如果我刷新页面,一切都会正常运行,直到我再次更新 Twig 模板。这显然使开发变得非常缓慢,因为我不断刷新页面。

到目前为止我做过的事情:-

  1. 已清除开发环境缓存。
  2. 已清除浏览器缓存。
  3. 确认用户确实已登录(否则不会 在第二次刷新时工作)

有没有人知道是什么导致了这个问题?

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

注意: 这是仍然导致问题的基本代码

【问题讨论】:

标签: symfony-2.6


【解决方案1】:

我不确定,但在我看来,您的类应该维护指向 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;
   }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-27
    • 1970-01-01
    • 2012-06-24
    • 1970-01-01
    相关资源
    最近更新 更多