Symfony 7 : Créer une API, Désérialisation et MapRequestPayload

แชร์
ฝัง
  • เผยแพร่เมื่อ 13 ม.ค. 2025

ความคิดเห็น • 10

  • @GuillaumeC37
    @GuillaumeC37 10 หลายเดือนก่อน +1

    Merci pour la vidéo. Mais à 8:30, on retrouve le souci du slug créé par l'utilisateur.

    • @gamesngeeks
      @gamesngeeks 10 หลายเดือนก่อน

      On peut passer par les DTO non?

    • @tajimaryohei
      @tajimaryohei 10 หลายเดือนก่อน +3

      Il y a pas mal de solutions pour pallier à cela. Perso je passe par l'utilisation du formulaire (le même qu'utilisé dans les vidéos précédentes) : tu gardes le contrôle des données et la logique de création du slug et des dates.
      Pour utiliser le formulaire il y a 2-3 modif à faire par rapport à ce qu'on fait d'habitude : on ne passe plus par la méthode $form->handleRequest() pour attacher les données envoyées mais plutôt par la méthode $form->submit($data) qui va soumettre le formulaire avec les données. Seul petit bémol, la méthode submit attends un tableau de données. Or le $request->getContent() nous renvoie un json donc faut le transformer en tableau (un bon vieux json_decode() marche).
      Et voilà. Si jamais le formulaire soumis est incorrect tu peux renvoyer les messages d'erreurs à l'utilisateur via la méthode $form->getErrors(true)

  • @golf3gtiii
    @golf3gtiii 10 หลายเดือนก่อน

    Bonjour,
    Merci pour la vidéo.
    Concernant l'édition d'une entité, je ne comprends pas comment on peut utiliser MapRequestPayload. Est-ce qu'il y a un moyen simple de le faire ? J'ai cru comprendre qu'il fallait passer par un resolver, mais je n'ai pas trouvé d'exemple concret.

    • @codingfred
      @codingfred 10 หลายเดือนก่อน

      Bonjour, pareil, pour l'édition j'ai dû utiliser la méthode "deserialize" ...

  • @Raphael-jo1rp
    @Raphael-jo1rp 9 หลายเดือนก่อน

    A noter qu'à l'heure où j'écris ces lignes, CàD en utilisant Symfony 5.8.12, la méthode paginateRecipes retourne un TypeError :
    "App\Repository\RecipeRepository::paginateRecipes(): Argument #1 ($page) must be of type int, null given"
    Ceci malgré le nullable sur la propriété public du contructeur du PaginationDTO, appliqué aussi dans la méthode index de RecipesController avec pour valeur par défaut null.
    J'ai testé avec le code source, c'est la même erreur.

  • @vincentphilippe_18
    @vincentphilippe_18 10 หลายเดือนก่อน

    Je ne comprends pas comment le MapRequestPayload fonctionnerait pour transformer un id en entité, je trouve ça assez limité finalement car c'est rare d'avoir des DTO composé uniquement de données scalaire

    • @R.e.n.e
      @R.e.n.e 10 หลายเดือนก่อน

      Il peut pas pour avoir un objet à partir d'Id il faut utiliser faire la méthode find du repository de l'objet

    • @PresteusSparkling
      @PresteusSparkling 10 หลายเดือนก่อน

      Un Data Transfer Object ne contient que du scalaire à part peut-être une composition avec un tableau de DTO.
      Si tu as autres choses, c'est que tu ne respectes pas le pattern DTO 😉
      Sinon, ce n'est pas l'attribut MapRequestPayload qui transforme les données d'entrées en instance d'objet, c'est le conteneur d'injection de dépendances (Autowiring).

  • @marxhubert
    @marxhubert 10 หลายเดือนก่อน

    1st comment