Поскольку вы пытаетесь определить, вошел ли пользователь в систему или нет, вполне возможно, что вы вообще не получите пользовательскую сущность .
Если пользователь не является войдя в систему, вы не получите «пользовательский объект» из службы хранения токенов, а также получите сообщение об ошибке при попытке получить доступ к его свойствам.
Кроме того, ваш пользователь уже обновлен к этой точке (если правильно аутентифицированы), поэтому получение его из Doctrine является избыточным, и вы можете избежать этого.
Правильный способ сделать это, предполагая, что ваш пользовательский класс реализует Symfony\Component\Security\Core\User\UserInterface
$user = $this->get('security.token_storage')->getToken()->getUser();
if (!$user instanceof UserInterface) {
// failure mode. Throw exception, return RedirectResponse, or what you prefer.
// We are dealing with an anonymous, non-authenticated user
}
Токен (getToken()
), может также быть null
, так что вы можете это проверить.
Но, учитывая, что вы в контроллере, и что маршрут, обрабатываемый контроллером, должен находиться за одним из межсетевых экранов ... обычно он никогда не будет нулевым.
Если бы это было null
, что-то еще не так в ваши настройки, и вам лучше поймать это прон к.