Symfony 6.1控制器中获取当前User实体的更优方法咨询
Symfony 6.1 获取当前User实体的更优方法
你当前的做法会多触发一次不必要的数据库查询——$this->getUser()其实已经从会话中加载了当前用户的对象,没必要再用Repository去查一次。针对需要User实体而非UserInterface的场景,有两种更简洁高效的方案:
方案一:直接类型转换/断言
因为当前认证的用户必然是你的User实体实例,所以可以直接做类型转换,或者用断言增强IDE类型提示:
// 直接强制类型转换 $user = (User)$this->getUser(); // 或者用断言明确类型(对IDE更友好) $user = $this->getUser(); assert($user instanceof User);
方案二:控制器方法参数注入(推荐)
Symfony支持通过#[CurrentUser]属性直接在控制器方法中注入当前用户实体,无需手动调用getUser():
use App\Entity\User; use Symfony\Component\Security\Http\Attribute\CurrentUser; public function yourAction(#[CurrentUser] User $user) { // 这里的$user就是已认证的User实体实例,直接使用即可 }
这种方式不仅省去了类型转换的步骤,还能获得完整的IDE类型提示,同时避免冗余查询,是最推荐的做法。
内容的提问来源于stack exchange,提问作者user18419618
相关产品推荐
相关产品推荐

