Error symfony 6 avec Api Platform : problème de serializer
Bonjour,
J'ai des difficultés sur mon projet symfony avec le serializer. En effet, certaines de mes propriétés renseignés dans mon attributs utilisateur, ne sont pas renseignables dans le JSON mis a disposition par API-Platform, et même en les rajoutant à la main, cela me produit des erreurs 500 disant que le champ ne peut pas être nul.
En cherchant, j'ai remarqué que mes propriétés qui ont été générées en snake_case par le make:entity ne sont pas disponible :
Le JSON mis en place par API-Platform:
Code:
1 2 3 4 5
| {
"login": "string",
"actif": true,
"email": "user@example.com"
} |
Le JSON attendu :
Code:
1 2 3 4 5 6 7 8
| {
"login":"apitest",
"mdp_provisoire":"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"type_utilisateur":"xxxxxxxxxxxxxx",
"actif":true,
"premiere_connexion":true,
"email":"api@example.com"
} |
En suivant les documents, j'ai tenté de mettre en place :
- la serialisation par groupes :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| #[ORM\Entity(repositoryClass: UtilisateurRepository::class)]
#[ApiResource(
// normalizationContext:['groups' => ['read']],
denormalizationContext:['groups' => ['Utilisateur:new']],
)]
class Utilisateur implements UserInterface, PasswordAuthenticatedUserInterface
#[ORM\Column(type: 'string', length: 150, unique:true, nullable:false)]
#[Groups("Utilisateur:new")]
private $login;
#[ORM\Column(type: 'string', length: 255, nullable: false)]
#[Groups("Utilisateur:new")]
private $mdp_provisoire;
#[ORM\Column(type: 'string', length: 50)]
#[Groups("Utilisateur:new")]
private $type_utilisateur;
#[ORM\Column(type: 'boolean')]
#[Groups("Utilisateur:new")]
private $actif;
... |
- annoter mes propriétés :
Code:
1 2 3 4 5 6 7 8 9
| #[ORM\Column(type: 'string', length: 150, unique:true, nullable:false)]
#[Groups("write:utilisateur")]
#[SerializedName('login')]
private $login;
#[ORM\Column(type: 'string', length: 255, nullable: false)]
#[Groups("write:utilisateur")]
#[SerializedName('mdp_provisoire')]
private $mdp_provisoire; |
- le changement de nom de conversion :
Code:
1 2 3 4 5 6
| # api/config/services.yaml
services:
'Symfony\Component\Serializer\NameConverter\CamelCaseToSnakeCaseNameConverter': ~
# api/config/packages/api_platform.yaml
api_platform:
name_converter: 'Symfony\Component\Serializer\NameConverter\CamelCaseToSnakeCaseNameConverter' |
- mettre un $normalizer ou une metadata dans mon entité utilisateur
Tout ceci sans succès jusqu'à présent.
Si vous avez une piste, je suis preneur!
Bonne journée,