2015-09-15 5 views
10

サービスを取得しているのは現在のログインしているユーザーですが、開発環境では一部の時間しか動作しません。私はそれが私が再び小枝テンプレートを更新するまで必要としてページのすべての作品更新するとTokenStorageはサービスでnullを返すことがあります

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

:私は小枝のテンプレートを変更すると、私はエラーを取得するリフレッシュたび

問題があると思われます。これは明らかに私がページを常にリフレッシュしているので、開発は非常に遅くなります。

物事私がこれまで行っている: -

  1. のdevの環境のキャッシュをクリアします。
  2. ブラウザのキャッシュをクリアしました。
  3. は、ユーザーが確実にログインしているを確認し(それ以外の場合は、 が第2のリフレッシュに動作しないでしょう)

誰もが問題を引き起こしている可能性がどのような任意のアイデアを持っていますか?

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

注:これはまだ問題

+0

チェック:http://stackoverflow.com/questions/24916638/symfony-dependency-injection-in-twig-extension –

+0

こんにちは、あなたが問題を引き起こして見つけますか?私もそれを経験しています。ありがとう! – iamjc015

答えて

3

が、私は確かではないんだけど、それはあなたのクラスのように私には見えます(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; 
    } 
}