如何在Symfony ParamConverter注解表达式中获取当前登录用户?
解决Symfony ParamConverter表达式中访问当前登录用户的问题
默认情况下,ParamConverter的表达式上下文并没有直接提供user变量,直接使用会抛出变量不存在的错误。要访问当前登录用户,需通过Symfony的token_storage服务来获取:
正确的表达式写法
使用token_storage.getToken().getUser()获取当前登录用户,建议增加空值判断,避免用户未登录时触发报错:
/** * @ParamConverter("order", class=Order::class, options={ * "expr": "repository.findByUser(token_storage.getToken() ? token_storage.getToken().getUser() : null)" * }) */ public function getOneAction() { }
原理说明
token_storage是Symfony容器中SecurityTokenStorageInterface服务的别名,用于管理当前用户的认证令牌;getToken()返回当前请求的认证令牌(用户未登录时会返回null);getUser()从令牌中提取当前登录的用户对象。
如果业务场景确保用户必须登录才能访问该接口,可简化表达式省略空值判断:
/** * @ParamConverter("order", class=Order::class, options={ * "expr": "repository.findByUser(token_storage.getToken().getUser())" * }) */ public function getOneAction() { }
内容的提问来源于stack exchange,提问作者gremo
相关产品推荐
相关产品推荐

