2015-09-15 9 views
10

Ich habe einen Dienst, der den aktuell angemeldeten Benutzer abruft, der nur zeitweise in der Entwicklungsumgebung funktioniert.TokenStorage gibt manchmal null in Service zurück

Das Problem scheint zu sein, wenn ich die Zweig-Vorlagen ändern und aktualisiere ich den Fehler:

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

Wenn ich die Seite alles funktioniert, wie es sollte aktualisieren, bis ich wieder die Zweig-Vorlage aktualisieren. Dies macht die Entwicklung natürlich sehr langsam, da ich die Seite ständig aktualisiere.

Dinge, die ich bisher getan haben: -

  1. der dev Umgebung Cache gelöscht.
  2. Der Browser-Cache gelöscht.
  3. bestätigt der Benutzer definitiv angemeldet

Hat jemand irgendwelche Ideen (sonst würde es die auf dem zweiten Refresh nicht arbeiten), was das Problem verursachen könnte?

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

Zweig Vorlage

{{ myservice.doSomething }} 

Hinweis:Das ist der nackte Knochen-Code, der nach wie vor das Problem verursacht

+0

Kontrolle: http://stackoverflow.com/questions/24916638/symfony-dependency-injection-in-twig-extension –

+0

Hallo, haben Sie gefunden, was das Problem verursacht? Ich erlebe es auch. Vielen Dank! – iamjc015

Antwort

3

Ich bin nicht sicher, aber es scheint mir, wie Ihre Klasse einen Zeiger auf die tokenStorage Klasse halten soll, nicht das Token selbst (wie sich das ändern kann). Ihr Service würde dann so aussehen:

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