与用户请求组对象

Request group object with the user

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

Symfony 在每个页面上实现用户对象并获取组的 ID(参见 var_dump),但我希望 Symfony 在每个页面上获取整个组对象,而不仅仅是 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
  }
}

如果您知道该怎么做,那将非常有帮助。

非常感谢。

请记住,控制器上的 $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();
}

这是 previously documented in Symfony versions <= 2.5 but was removed from the documentation 为了清楚起见,可能是因为大多数情况下不需要它。如果你愿意,你也可以将它移动到你的UserRepository(如果它存在)并从那里调用它。

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