Я пытаюсь выйти из системы моего пользователя, получая его токен (который существует и работает) следующим образом:
public function logout(Request $request, TokenStorageInterface $tokenStorage)
{
$em = $this->get('doctrine.orm.entity_manager');
$user = $this->getUser();
$user->setConnected(false);
$em->remove($tokenStorage->getToken()); // Error is here
$em->persist($user);
$em->flush();
}
Когда я запрашиваю этот метод, я получаю следующую ошибку:
Класс ‘Symfony \ Component \ Security \ Core \ Authentication \ Token \ PreAuthenticatedToken’ не найден в настроенных цепочках пространств имен App \ Entity
Я попытался выполнить поиск в Google и SO, но не нашел ни одной связанной темы, так как этот класс не является сущностью.
Я попытался включить выражение «use» поверх моего контроллера, но это не сработало.
Что я делаю неправильно ?
Спасибо всем, кто найдет время, чтобы прочитать или ответить на это.
Ошибка в том, что вы используете менеджер сущностей доктрины, чтобы что-то делать с хранилищем токенов (я думаю, это cookie-файл сеанса), и это, конечно, не та сущность, о которой доктрина ничего не знает. Просто удали свою линию
$em->remove($tokenStorage->getToken()); // <--- REMOVE
и вместо этого сделайте это:
$tokenStorage->setToken(null);
Других решений пока нет …