在我的symfony应用程序中,使用fosuserbundle,这是我创建的 DQL 查询,用于恢复有关用户所需的所有数据:
public function getAlluserNeedlesInfo()
{
return
$this->getEntityManager()
->createQuery(
'SELECT partial u.{id, username, email, roles, enabled, createdAt, updatedAt}, partial c.{id, companySiret, companyName, professional, firstName, lastName, slug, createdAt, updatedAt}
FROM AppBundle:User u
JOIN u.consumer c
ORDER BY u.id ASC'
)
->getResult();
}
这是我的控制器方法代码:
public function usersAction()
{
$em = $this->getDoctrine()->getManager();
$users = $em->getRepository('AppBundle:User')->getAlluserNeedlesInfo();
$serializedEntity = $this->container->get('serializer')->serialize($users, 'json');
return new Response($serializedEntity);
}
现在一切正常,这是我的控制器方法返回的json格式的结果:
[{
"id": 1,
"username": "test",
"email": "test@test.com",
"enabled": true,
"roles": [],
"consumer": {
"id": 1,
"professional": false,
"last_name": "TEST",
"first_name": "test",
"slug": "test-test",
"created_at": "2016-10-07T03:22:32+0200",
"updated_at": "2016-10-07T17:42:17+0200"
},
"created_at": "2016-10-02T07:28:28+0200",
"updated_at": "2016-10-09T01:05:04+0200"
}, {
"id": 2,
"username": "admin",
"email": "admin@test.com",
"enabled": true,
"roles": ["ROLE_ADMIN"],
"consumer": {
"id": 2,
"company_name": "admin",
"company_siret": "01234567890006",
"professional": true,
"last_name": "ADMIN",
"first_name": "Admin",
"slug": "admin-admin",
"created_at": "2016-10-06T08:45:23+0200",
"updated_at": "2016-10-07T07:59:34+0200"
},
"created_at": "2016-09-04T12:14:03+0200",
"updated_at": "2016-10-09T03:03:00+0200"
}, {
"id": 3,
"username": "test2",
"email": "test2@test.com",
"enabled": false,
"roles": [],
"consumer": {
"id": 3,
"company_name": "test2",
"company_siret": "02896452300006",
"professional": true,
"last_name": "TEST2",
"first_name": "test2",
"slug": "test2-test2",
"created_at": "2016-10-07T03:22:32+0200",
"updated_at": "2016-10-07T17:42:17+0200"
},
"created_at": "2016-10-07T17:28:08+0200",
"updated_at": "2016-10-07T17:28:08+0200"
}, {
"id": 4,
"username": "ju",
"email": "j.val@gmail.com",
"enabled": true,
"roles": [],
"consumer": {
"id": 4,
"professional": false,
"last_name": "Val",
"first_name": "ju",
"slug": "val-ju",
"created_at": "2016-10-07T18:07:06+0200",
"updated_at": "2016-10-07T18:07:06+0200"
},
"created_at": "2016-10-07T18:07:06+0200",
"updated_at": "2016-10-07T18:07:06+0200"
}]
一切正常,但我注意到如果我使用其中一个用户登录(例如 Val-Ju ),则查询会返回其他一些凭据和数据我没有指定,例如:
[{
"id": 1,
"username": "test",
"email": "test@test.com",
"enabled": true,
"roles": [],
"consumer": {
"id": 1,
"professional": false,
"last_name": "TEST",
"first_name": "test",
"slug": "test-test",
"created_at": "2016-10-07T03:22:32+0200",
"updated_at": "2016-10-07T17:42:17+0200"
},
"created_at": "2016-10-02T07:28:28+0200",
"updated_at": "2016-10-09T01:05:04+0200"
}, {
"id": 2,
"username": "admin",
"email": "admin@test.com",
"enabled": true,
"roles": ["ROLE_ADMIN"],
"consumer": {
"id": 2,
"company_name": "admin",
"company_siret": "01234567890006",
"professional": true,
"last_name": "ADMIN",
"first_name": "Admin",
"slug": "admin-admin",
"created_at": "2016-10-06T08:45:23+0200",
"updated_at": "2016-10-07T07:59:34+0200"
},
"created_at": "2016-09-04T12:14:03+0200",
"updated_at": "2016-10-09T03:03:00+0200"
}, {
"id": 3,
"username": "test2",
"email": "test2@test.com",
"enabled": false,
"roles": [],
"consumer": {
"id": 3,
"company_name": "test2",
"company_siret": "02896452300006",
"professional": true,
"last_name": "TEST2",
"first_name": "test2",
"slug": "test2-test2",
"created_at": "2016-10-07T03:22:32+0200",
"updated_at": "2016-10-07T17:42:17+0200"
},
"created_at": "2016-10-07T17:28:08+0200",
"updated_at": "2016-10-07T17:28:08+0200"
}, {
"id": 4,
"username": "ju",
"username_canonical": "ju",
"email": "j.val@gmail.com",
"email_canonical": "j.val@gmail.com",
"enabled": true,
"salt": "5ng0rXXXXXXXXXXccwowscs4s",
"password": "$2yXXXXXXXXXXXXXXXXXXXXXXXXXX1HgIHe42rz\/agpB.0fC",
"last_login": "2016-10-07T18:15:32+0200",
"locked": false,
"expired": false,
"roles": [],
"credentials_expired": false,
"consumer": {
"id": 4,
"professional": false,
"last_name": "Val",
"first_name": "ju",
"slug": "val-ju",
"created_at": "2016-10-07T18:07:06+0200",
"updated_at": "2016-10-07T18:07:06+0200"
},
"created_at": "2016-10-07T18:07:06+0200",
"updated_at": "2016-10-07T18:15:32+0200"
}]
当然,这是我不想要的,这是一种不理想的行为。
为什么会出现这种行为?
答案 0 :(得分:1)
它是FOSUserBundle的默认序列化配置,如果您已登录,它将序列化您的所有内容。
您需要覆盖此配置。可以通过添加
来完成# src/MyBundle/Resources/config/serialization/Model.User.yml
FOS\UserBundle\Model\User:
exclusion_policy: ALL
properties:
username:
expose: true
groups: ["aGroupIfNeeded"]
#...
如果您想了解有关serialization groups的更多信息。