Normalization Context
Étant donné que nous voulons avoir le contrôle sur ce qu'on veut lire et écrire on va utiliser les groupes de normalization et de denormalization.
En rajoutant normalizationContext={"groups"={"user:read"}},
sur notre entité User nous allons pouvoir choisir les attributs qu'on va renvoyer.
/**
* @ORM\Entity(repositoryClass=UserRepository::class)
* @ApiResource(
* normalizationContext={"groups"={"user:read"}},
* )
*/
class User implements UserInterface
Nous sommes dans la partie encadré en rouge. Nous partons de l'objet et nous allons vers le JSON
Si on fais un GET /users nous n'avons plus d'informations retournés si ce n'est les élèments @id
et @type
{
"@context": "/api/contexts/User",
"@id": "/api/users",
"@type": "hydra:Collection",
"hydra:member": [
{
"@id": "/api/users/1",
"@type": "User"
}
],
"hydra:totalItems": 1
}
Nous voulons retourner l'id
, l'email
et les roles
. On importe la classe Groups comme suit :
use Symfony\Component\Serializer\Annotation\Groups;
// ...
/**
* @ORM\Entity(repositoryClass=UserRepository::class)
* @ApiResource(
* normalizationContext={"groups"={"user:read"}},
* )
*/
class User implements UserInterface
{
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
* @Groups({"user:read"})
*/
private $id;
/**
* @ORM\Column(type="string", length=180, unique=true)
* @Groups({"user:read"})
*/
private $email;
/**
* @ORM\Column(type="json")
* @Groups({"user:read"})
*/
private $roles = [];
Maintenant en refaisant un GET /users
nous avons uniquement les attributs qui appartiennent au groupe user:read
{
"@context": "/api/contexts/User",
"@id": "/api/users",
"@type": "hydra:Collection",
"hydra:member": [
{
"@id": "/api/users/1",
"@type": "User",
"id": 1,
"email": "string",
"roles": [
"string",
"ROLE_USER"
]
}
],
"hydra:totalItems": 1
}
L'email et roles sont équivaut à string
car lors du POST /users
nous avions laissés les données qui étaient générées par la documentation. Nous allons vérifier les données avant de les enregistrer dans la partie Denormalization
Commentaires
Connectez-vous pour laisser un commentaire