gpt4 book ai didi

symfony-2.6 - TokenStorage 有时在 Service 中返回 null

转载 作者:行者123 更新时间:2023-12-01 15:32:47 24 4
gpt4 key购买 nike

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

问题似乎是每当我更改 Twig 模板并刷新时,我都会收到错误消息:

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

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

到目前为止我所做的事情:-
  • 清除开发环境缓存。
  • 清除浏览器缓存。
  • 确认用户确实已登录(否则它不会
    在第二次刷新时工作)

  • 有没有人有任何想法可能导致问题?

    服务.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;
    }
    }

    Twig 模板
    {{ myservice.doSomething }}

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

    最佳答案

    我不确定,但在我看来,您的类应该维护一个指向 tokenStorage 类的指针,而不是 token 本身(因为这可能会改变)。您的服务将如下所示:

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

    关于symfony-2.6 - TokenStorage 有时在 Service 中返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32590621/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com