调用null对象的getId()方法报错及后续Doctrine查询问题求助
解决Symfony UserAwareTrait中的两个错误
错误原因分析
初始错误 Fatal error: Call to a member function getId() on null
当用户未登录时,parent::getUser() 返回 null,直接调用 ->getId() 会触发致命错误——无法对null对象调用方法。
修改后的错误 The identifier id is missing for a query of App\Entity\User
Doctrine\ORM\EntityManager::find()方法的第二个参数需要传入实体的主键ID值,你传入了parent::getUser()(可能是用户对象或null),Doctrine无法识别该参数作为主键,因此报错。- 方法声明返回
?UserEntity,但代码中返回$findResult->getId()(通常是int/string类型),返回值类型不匹配,违反了方法的类型声明。
正确解决方案
以下是修正后的代码,同时处理未登录场景、参数传递错误和类型匹配问题:
public function getUser(): ?UserEntity { $parentUser = parent::getUser(); // 用户未登录时直接返回null if ($parentUser === null) { return null; } // 如果父类返回的已经是UserEntity实例,直接返回(避免多余的数据库查询) if ($parentUser instanceof UserEntity) { return $parentUser; } // 通过用户ID从数据库查找实体 return $this->getDoctrine()->getManager()->find(UserEntity::class, $parentUser->getId()); }
额外说明
- 确保
parent::getUser()返回的对象实现了getId()方法(Symfony的UserInterface默认要求实现该方法)。 - 如果你的项目中,
parent::getUser()已经直接返回UserEntity实例(比如Security配置正确),可以简化代码,直接返回$parentUser即可,无需查询数据库。
内容的提问来源于stack exchange,提问作者MrsStorm
相关产品推荐
相关产品推荐

