2016-10-07 7 views
1

В моем симфони приложении, используя fosuserbundle тоже это DQL запроса я создаю, чтобы восстановить все данные мне нужно относительно пользователя:Symfony запросы пользователей возвращаемых полей Я не указать, когда я вошел в

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": "[email protected]", 
    "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": "[email protected]", 
    "enabled": true, 
    "roles": ["ROLE_ADMIN"], 
    "consumer": { 
     "id": 2, 
     "company_name": "admin", 
     "company_siret": "", 
     "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": "[email protected]", 
    "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": "[email protected]", 
    "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": "[email protected]", 
    "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": "[email protected]", 
    "enabled": true, 
    "roles": ["ROLE_ADMIN"], 
    "consumer": { 
     "id": 2, 
     "company_name": "admin", 
     "company_siret": "", 
     "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": "[email protected]", 
    "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": "[email protected]", 
    "email_canonical": "[email protected]", 
    "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" 
}] 

конечно, это вещь, которую я не хочу, и это, не желательное поведение.

Почему такое поведение возникло?

ответ

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.