Doctrine Symfony自定义查询$this->;控制器中的getUser()

Doctrine Symfony自定义查询$this->;控制器中的getUser(),doctrine,Doctrine,是否可以使用自定义查询,或者在执行此操作时只修改Symfony使用的查询生成器 public function profileAction(Request $request) { /** @var User */ $user = $this->getUser(); // <=== this return $this->getUser(); } 我希望能够按需执行此操作,而不是每次。用户提供商负责从持久性源获取用户。配置在security.yaml配置

是否可以使用自定义查询,或者在执行此操作时只修改Symfony使用的查询生成器

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()
    ;
}