Doctrine Symfony自定义查询$this->;控制器中的getUser()
是否可以使用自定义查询,或者在执行此操作时只修改Symfony使用的查询生成器Doctrine Symfony自定义查询$this->;控制器中的getUser(),doctrine,Doctrine,是否可以使用自定义查询,或者在执行此操作时只修改Symfony使用的查询生成器 public function profileAction(Request $request) { /** @var User */ $user = $this->getUser(); // <=== this return $this->getUser(); } 我希望能够按需执行此操作,而不是每次。用户提供商负责从持久性源获取用户。配置在security.yaml配置
public function profileAction(Request $request)
{
/** @var User */
$user = $this->getUser(); // <=== this
return $this->getUser();
}
我希望能够按需执行此操作,而不是每次。用户提供商负责从持久性源获取用户。配置在security.yaml配置文件中完成 您可以在文档的这一页找到如何使用自定义查询
不幸的是,您不能按需执行此操作。只需将用户存储库添加到控制器的
\u结构中,并在需要时访问它。覆盖getUser
除了“按需”提供意外行为之外,还应该实现什么?我的findOneByUsernameOrEmail
只是一个例子,我需要getUser
才能获取当前登录的用户。您可以通过执行user=$yourRepo()->yourCustomGetUser($this->getUser()->getUsername>来解决问题())
如果您的路由受保护。如果路由不受保护,并且您尝试在未登录的情况下访问它,则会出现错误无法访问字符串类型的“getUsername()”或类似的内容。但是,我不建议您这样做,因为(imo)不需要按需获取此数据。
public function findOneByUsernameOrEmail($username)
{
$qb = $this->createQueryBuilder('u');
return $qb
->addSelect('c', 'ai', 'pp')
->leftJoin('u.country', 'c')
->leftJoin('u.avatarImage', 'ai')
->leftJoin('u.profilePicture', 'pp')
->where($qb->expr()->orX(
'u.username = :username',
'u.email = :username'
))
->setParameter('username', $username)
->getQuery()
->getOneOrNullResult()
;
}