Чтобы получить доступ к текущему авторизованному пользователю (без учета токена на данный момент), можно и нужно сделать, вызвав $user = $this->getUser();
в контроллере, а НЕ добавив пользователя в заголовок метода (так что удалите это).
затем вы можете проверить:
if($user->getToken() != $token) {
return $this->redirect....
}
вы должны удалить аннотацию ParamConverter, если это то, что вы хотели.
исходный ответ ниже:
User
является сущностью и не может быть предоставлен с помощью автоматического подключения symfony. Резервным вариантом для параметров функции контроллера является использование ParamConverter, чтобы каким-то образом получить пользователя из репозитория, используя соответствующие заполнители вашего запроса. Использование {token}
(его значение) в качестве идентификатора (по умолчанию id
) - видимо, тоже не работает. Недостаточно умен, чтобы понять, что с помощью {token}
вы хотите запрашивать объекты User, чье свойство token
является значением.
Это приводит к вашему сообщению об ошибке.
Если вы действительно хотите использовать токен для выборки пользователя с помощью ParamConverter, вы должны предоставить ему несколько подсказок, как это сделать.
Вы можете добавить следующую аннотацию (возможно, вам придется добавить условие использования use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
):
@ParamConverter("user", options={"mapping": {"token": "token"}})
при условии, что токен является частью вашего объекта User и хранится в базе данных.
Источник: https://symfony.com/doc/current/bundles/SensioFrameworkExtraBundle/annotations/converters.html