TokenStorage иногда возвращает null в Service
У меня есть Служба, которая получает текущего зарегистрированного пользователя, который работает только некоторое время в среде dev.
Проблема заключается в том, что когда я изменяю шаблоны Twig и обновляюсь, я получаю сообщение об ошибке:
Error: Call to a member function getUser() on null
Если обновить страницу, все будет работать так, как только я снова обновлю шаблон Twig. Это явно замедляет процесс разработки, поскольку я постоянно обновляю страницу.
Вещи, которые я сделал до сих пор: -
- Очистил кеш-сервер dev.
- Очистил кеш браузера.
- Подтверждено, что пользователь определенно зарегистрировался (в противном случае он не будет
работайте на втором обновлении)
Есть ли у кого-нибудь идеи, что может вызвать проблему?
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
{{ myservice.doSomething }}
Примечание.. Это код с костями, который все еще вызывает проблему.
Ответы
Ответ 1
Я не уверен, но мне кажется, что ваш класс должен поддерживать указатель на класс 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;
}
}