Pytanie TokenStorage czasami zwraca wartość null w usłudze


Mam usługę, która jest aktualnie zalogowanym użytkownikiem, która działa tylko przez jakiś czas w środowisku deweloperskim.

Problem wydaje się być, ilekroć zmieniam szablony Twig i odświeżam, pojawia się błąd:

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

Jeśli odświeżam stronę, wszystko działa tak, jak powinno, dopóki nie zaktualizuję ponownie szablonu Twig. To oczywiście sprawia, że ​​rozwój jest bardzo powolny, ponieważ stale odświeżam stronę.

Rzeczy, które do tej pory zrobiłem: -

  1. Usunięto pamięć podręczną środowiska deweloperskiego.
  2. Wyczyścić pamięć podręczną przeglądarki.
  3. Potwierdzone, że użytkownik jest zdecydowanie zalogowany (w przeciwnym razie nie będzie pracować przy drugim odświeżaniu)

Czy ktoś ma jakieś pomysły, co może być przyczyną problemu?

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

Szablon twig

{{ myservice.doSomething }}

Uwaga:  Jest to kod barebone, który nadal powoduje problem


10
2017-09-15 16:00


pochodzenie


czek: stackoverflow.com/questions/24916638/... - Eray Balkanli
Cześć, czy znalazłeś przyczynę problemu? Ja też tego doświadczam. Dzięki! - iamjc015


Odpowiedzi:


Nie jestem pewien, ale wygląda na to, że twoja klasa powinna utrzymywać wskaźnik do klasy tokenStorage, a nie sam token (może się to zmienić). Twoja usługa będzie wyglądać następująco:

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

3
2017-09-27 21:07