向用户请求组对象

时间:2017-08-27 16:17:24

标签: php symfony doctrine-orm symfony-3.3

我正在学习Symfony而我正在创建自己的UserBundle,因为我必须使用在线API来管理用户。所以我加入了具有doctrine ManyToOne关系的User和Group对象。目前一切正常。

Symfony正在实现每个页面上的User对象并获取组的id(参见var_dump),但我想从Symfony获取每个页面上的整个Group对象而不仅仅是它的id。

User {#467 ▼
  -id: 104
  -uuid: "~"
  -username: "~"
  -lastLogin: null
  -websiteActivity: null
  -clientToken: "1c667ad4-07e2-4ffa-8db1-9997eadbbc4b"
  -accessToken: "b183f850ce4d4decb07cb7485c1d0a88"
  -dataCheck: DateTime {#457 ▼
    +"date": "2017-08-27 18:23:31.000000"
    +"timezone_type": 3
    +"timezone": "Europe/Berlin"
  }
  -reputation: 0
  -group: Group {#456 ▼
    +__isInitialized__: false
    -id: 4
    -inheritId: null
    -name: null
    -chatColor: null
    -websiteName: null
    -websiteColor: null
     …2
  }
}

如果你知道如何做到这将是非常有帮助的。

非常感谢。

1 个答案:

答案 0 :(得分:1)

请记住,控制器上的$this->getUser()是以下内容的别名:

$this->container->get('security.token_storage')->getToken()->getUser();

您可以查看Using a Custom Query to Load the User。您可以使用它自动加入您的组实体:

public function loadUserByUsername($username)
{
    return $this->createQueryBuilder('u')
        ->select('u, g')
        ->leftJoin('u.group', 'g')
        ->where('u.username = :username OR u.email = :email')
        ->setParameter('username', $username)
        ->setParameter('email', $username)
        ->getQuery()
        ->getOneOrNullResult();
}

这是Symfony版本中的previously documented< = 2.5但是为了清晰起见removed from the documentation,可能是因为大多数情况下都不需要它。如果您愿意,也可以将其移至UserRepository(如果存在)并从那里调用。

这将在用户登录时生效。尝试查看是否会自动检索您的Group对象。