2015-09-15 14 views
10

Tôi có một Dịch vụ nhận được người dùng đã đăng nhập hiện tại, chỉ hoạt động trong một khoảng thời gian trong môi trường dev.TokenStorage đôi khi trả về giá trị rỗng trong Dịch vụ

Vấn đề có vẻ là bất cứ khi nào tôi thay đổi mẫu cành và làm mới tôi nhận được lỗi:

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

Nếu tôi làm mới trang mọi thứ hoạt động như mong muốn cho đến khi tôi cập nhật các mẫu cành một lần nữa. Điều này rõ ràng làm cho phát triển rất chậm khi tôi liên tục làm mới trang.

Những điều tôi đã làm như vậy cho đến nay: -

  1. dọn dẹp bộ nhớ cache môi trường dev.
  2. Đã xóa bộ nhớ cache của trình duyệt.
  3. Đã xác nhận người dùng được chắc chắn đăng nhập (nếu không nó sẽ không làm việc trên làm mới thứ hai)

Có ai có bất kỳ ý tưởng những gì có thể gây ra vấn đề?

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

Twig Template

{{ myservice.doSomething }} 

Lưu ý:Đây là mã trần xương mà vẫn gây ra vấn đề

+0

kiểm tra: http://stackoverflow.com/questions/24916638/symfony-dependency-injection-in-twig-extension –

+0

Hi, bạn đã tìm thấy những gì gây ra vấn đề? Tôi cũng đang trải qua nó. Cảm ơn! – iamjc015

Trả lời

3

Tôi không chắc chắn, nhưng có vẻ với tôi như lớp học của bạn nên duy trì một con trỏ đến lớp tokenStorage, không phải là dấu hiệu riêng của mình (vì điều này có thể thay đổi). dịch vụ của bạn sau đó sẽ trông như thế này:

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; 
    } 
} 
Các vấn đề liên quan