Symfony - Исключение сопоставления - класс 'PreAuthenticatedToken' не найден в настроенных цепочках пространств имен App\Entity

Я пытаюсь выйти из системы моего пользователя, получая его токен (который существует и работает) следующим образом:

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" поверх моего контроллера, но это не сработало.

Что я делаю неправильно?

Спасибо всем, кто найдет время, чтобы прочитать или ответить на это.

1 ответ

Ошибка в том, что вы используете менеджер сущностей доктрины, чтобы что-то делать с хранилищем токенов (я думаю, это cookie-файл сеанса), и это, конечно, не та сущность, о которой доктрина ничего не знает. Просто удали свою линию

$em->remove($tokenStorage->getToken()); // <--- REMOVE

и вместо этого сделайте это:

$tokenStorage->setToken(null);
Другие вопросы по тегам