IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

Custom Denormalizer - Error d'allocation mémoire


Sujet :

Symfony PHP

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Novembre 2024
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Novembre 2024
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Custom Denormalizer - Error d'allocation mémoire
    J'ai un système d'articles et de catégories.

    J'essaie de créer un custom denormalizer pour ajouter l'id de l'utilisateur à un article et à une catégorie qu'on crée.

    UserOwnedDenormalizer.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    <?php
     
    namespace App\Serializer;
     
    use App\Entity\Category;
    use App\Entity\Post;
    use App\Entity\UserOwnedInterface;
    use Symfony\Bundle\SecurityBundle\Security;
    use Symfony\Component\Serializer\Normalizer\DenormalizerAwareInterface;
    use Symfony\Component\Serializer\Normalizer\DenormalizerAwareTrait;
    use Symfony\Component\Serializer\Normalizer\DenormalizerInterface;
     
    class UserOwnedDenormalizer implements DenormalizerInterface, DenormalizerAwareInterface
    {
        use DenormalizerAwareTrait;
     
        private const ALREADY_CALLED_DENORMALIZER = 'UserOwnedDenormalizerCalled';
     
        public function __construct(private Security $security)
        {
        }
     
        public function denormalize(mixed $data, string $type, ?string $format = null, array $context = []): mixed
        {
            $data[self::ALREADY_CALLED_DENORMALIZER] = true;
     
            /** @var UserOwnedInterface $obj */
            $obj = $this->denormalizer->denormalize($data, $type, $format, $context);
            $obj->setUser($this->security->getUser());
     
            return $obj;
        }
     
        public function supportsDenormalization(mixed $data, string $type, ?string $format = null, array $context = []): bool
        {
            $reflectionClass = new \ReflectionClass($type);
            $alreadyCalled = $data[self::ALREADY_CALLED_DENORMALIZER] ?? false;
            return $reflectionClass->implementsInterface(UserOwnedInterface::class) && $alreadyCalled === false;
        }
     
        public function getSupportedTypes(?string $format): array
        {
            return [Post::class => true, Category::class => true];
        }
    }
    Quand Post::class et Category::class sont à true, j'ai cette erreur :
    Fatal error: Allowed memory size of 536870912 bytes exhausted (tried to allocate 20480 bytes) in C:\Users\xxx\projet\src\Serializer\UserOwnedDenormalizer.php on line 29

    Fatal error: Allowed memory size of 536870912 bytes exhausted (tried to allocate 32768 bytes) in C:\Users\xxx\projet\vendor\symfony\error-handler\Error\OutOfMemoryError.php on line 1
    Pourquoi ?

  2. #2
    Membre éclairé
    Homme Profil pro
    Autre
    Inscrit en
    Juillet 2021
    Messages
    381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Juillet 2021
    Messages : 381
    Points : 764
    Points
    764
    Par défaut
    Bonjour,

    Difficile de déboguer ton erreur sans avoir un exemple reproductible. Tu pourrais essayer de faire une exécution pas à pas via Xdebug (Step Debugging) pour mieux comprendre le problème.

    On remarque que ton erreur se produit ligne 29 lors de l'appel de la méthode denormalize() dans ta méthode custom denormalize() : il semble donc que la méthode denormalize() soit appelée dans une boucle infinie, ce qui pourrait expliquer l'erreur out of memory.

    Il peut s'agir d'un problème de référence circulaire selon les relations entre tes entités, voir https://symfony.com/doc/current/comp...lar-references

    Un autre incident similaire : https://github.com/api-platform/api-...rm/issues/2737
    Ici l'auteur n'avait pas bien compris les valeurs retournées par getSupportedTypes() : true ou false pour indiquer que le résultat peut être mis en cache ou non, null pour indiquer que le type n'est pas supporté (voir https://symfony.com/doc/current/seri...-denormalizers)

Discussions similaires

  1. [IIS 7.5] webconfig custom page error
    Par mGraph dans le forum IIS
    Réponses: 0
    Dernier message: 01/07/2020, 10h43
  2. Réponses: 0
    Dernier message: 17/12/2014, 15h34
  3. Réponses: 11
    Dernier message: 19/08/2010, 13h47
  4. Custom tool error: Failed to generate code.
    Par jkamelin dans le forum C#
    Réponses: 2
    Dernier message: 15/09/2009, 19h18
  5. Réponses: 2
    Dernier message: 20/04/2008, 23h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo