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 :

Erreur Xdebug.max nesting_level [2.x]


Sujet :

Symfony PHP

  1. #1
    Membre actif Avatar de FadeToBlack
    Homme Profil pro
    ...
    Inscrit en
    Août 2010
    Messages
    311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : ...
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Août 2010
    Messages : 311
    Points : 202
    Points
    202
    Par défaut Erreur Xdebug.max nesting_level
    Bonjour à tous,

    Je crée un nouveau post car le précédent n'était, à mon sens, pas suffisamment, lisible.

    Alors voilà le problème :
    Mon appli contient un formulaire dans lequel j'ai imbriqué plusieurs autres (4 en tout). Le dernier installé est un formulaire héritant de celui de base.

    En effet, le formulaire Père est un formulaire décrivant des individus. Le dernier formulaire enfant est un formulaire recueillant des infos sur les enfants de ces individus (qui sont des individus - ils proviennent de la même entité). Dans les faits j'ai une relation ManyToMany Sel-referencing et bi directionnelle.

    Bref lorsque je lance l'appli, je me retrouve avec l'erreur mentionnée dans la doc de symfony sur les formulaires imbriqués, à savoir :

    Maximum function nesting level of '100' reached, aborting!.
    Suivant les instructions de la doc, je monte le niveau à 200( dans le php.ini) . Rien jusqu'à 1300 et là j'ai une page blanche......... sans erreur.

    Du coup, je me dis que je vais désactiver Xdebug. Et là j'ai l'erreur suivante :

    Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 49 bytes) in C:\wamp\www\romSymf\vendor\symfony\symfony\src\Symfony\Component\OptionsResolver\Options.php on line 91
    Je comprends que la mémoire est épuisé, mais comment cela est arrivé et surtout remédier à ce problème ? En regardant le error_log d'apache, je me suis rendu compte, a priori, que je générais une boucle infinie. Evidemment, cela plante.

    En fin, j'ai remplacé tous form_label et form_widget du fichier Twig, par des form_row (comme expliqué là aussi dans la doc). Mais rien y fait.


    Mais comment insérer un formulaire dans un autre identique, sans créer cette boucle?

    Je me dis aussi que mon appli est toute bête et relativement simple hormis cette histoire d'imbrication de formulaire sur lui-même.

    Je précise que j'avais fais une version de cette Appli, en Php sans aucun framework et tout fonctionnait bien.....

    Auriez-vous une solution ou une indication sur la(les) méthode(s) à utiliser pour résoudre le problème.

    Cela fait deux jours que je suis là dessus et ne trouve aucune solution.
    Douter de tout, toujours, et surtout de soi-même...

  2. #2
    Membre actif Avatar de FadeToBlack
    Homme Profil pro
    ...
    Inscrit en
    Août 2010
    Messages
    311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : ...
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Août 2010
    Messages : 311
    Points : 202
    Points
    202
    Par défaut
    Salut à tous,

    Bon bah je me réponds à moi même puisque personne ne semble avoir de solution. Et puis comme j'ai trouvé , et ben je vous la livre, cela pourra éviter à d'autres 2 jours perdus et une chute de cheveux trop importante.


    LA SOLUTION :

    En fait le problème résidait dans une boucle infinie issue de l'imbrication d'un formulaire dans lui-même.

    J'ai ensuite essayé de créer un second formulaire héritant du premier. Là encore problème.

    Et puis je ne sais pas ce qu'il m'a pris ce matin, mais je me suis dis que peut être il faudrait faire un second formulaire indépendant du premier mais toujours basé sur la même entité.

    Et pouff cela fonctionne impec. C'était trop simple
    Douter de tout, toujours, et surtout de soi-même...

  3. #3
    Membre expert
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Points : 3 004
    Points
    3 004
    Par défaut
    je n compte plus mes jours perdus sur des trucs simples ou sur des betises

  4. #4
    Membre actif Avatar de FadeToBlack
    Homme Profil pro
    ...
    Inscrit en
    Août 2010
    Messages
    311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : ...
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Août 2010
    Messages : 311
    Points : 202
    Points
    202
    Par défaut
    Salut dukoid,

    Je suis d'accord avec toi. J'en ai perdu du temps sur des trucs de mer... et surtout carrément évident. Et c'est là que tu as envi de balancer ton ordi par la fenêtre.

    Mais là, j'ai passé deux jours sur le net a essayer de trouver un indice de ce qu'il se passait et ben rien de rien de rien de rien.

    A croire que je suis le seul crétin à vouloir imbriquer un formulaire issu de le même entité
    Douter de tout, toujours, et surtout de soi-même...

  5. #5
    Membre régulier
    Homme Profil pro
    Lead Développeur
    Inscrit en
    Novembre 2011
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Lead Développeur
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2011
    Messages : 52
    Points : 75
    Points
    75
    Par défaut
    Je me permet d'ajouter mon grain de sel.

    En laissant la limite de base pour xdebug, on peut quand meme se trouver rapidement bloqué avec des formulaires correctes mais assez complexes, comme expliquer sur cette doc.

    Une des solutions est d'augmenter cette limite (500 par exemple) dans le fichier app/autoload.php, par exemple:

    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?php
     
    use Doctrine\Common\Annotations\AnnotationRegistry;
     
    $loader = require __DIR__.'/../vendor/autoload.php';
     
    // [...]
     
    // Change nested level max for xdebug
    if (false !== ini_get('xdebug.max_nesting_level')) {
        ini_set('xdebug.max_nesting_level', 500);
    }
     
    return $loader;



    EDIT: Petit article ou j'en parle: http://devyourdream.net/2013/04/22/s...nesting_level/

  6. #6
    Membre actif Avatar de FadeToBlack
    Homme Profil pro
    ...
    Inscrit en
    Août 2010
    Messages
    311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : ...
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Août 2010
    Messages : 311
    Points : 202
    Points
    202
    Par défaut
    Salut Soullivaneuh,

    Je suis d'accord avec toi et j'avais lu cette partie de la doc de symfony. Je n'avais pas fais cette modif' parce que j'avais préféré passer par le php.ini.

    Quoiqu'il en soit les deux manipulations arrivent au même résultat a savoir augmenter le niveau maximal de xdebug.

    Mon problème n'était pas là puisque je suis monté jusqu'à 1500, avec toujours une impossibilité de charger mon formulaire de base.

    Dans le formulaire père j'imbriquais le même formulaire, ce qui devait me créer une boucle infinie. Idem lorsque j'ai essayé d'imbriquer un formulaire héritant du premier.

    Dans les deux cas j'avais soit une erreur liée à xdebug.max etc.. soit un temps de chargement trop long.

    Du coup, la solution de créer un second formulaire issue de la même entité mais indépendant du père a permis de résoudre le problème. Je n'avais plus de boucle.
    Douter de tout, toujours, et surtout de soi-même...

  7. #7
    Membre régulier
    Homme Profil pro
    Lead Développeur
    Inscrit en
    Novembre 2011
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Lead Développeur
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2011
    Messages : 52
    Points : 75
    Points
    75
    Par défaut
    Oui en effet dans ce cas changer la limite ne regle pas trop le probleme ! :p

    Mais c'est toujours bon d'explorer les possibilites, pour les prochains qui tomberont sur ton post !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Erreur XDebug lors d'un accès en base
    Par dukoid dans le forum Doctrine2
    Réponses: 0
    Dernier message: 03/03/2013, 12h06
  2. Réponses: 4
    Dernier message: 12/01/2011, 16h29
  3. [A-07] SQL erreur fonction agrégat compte max
    Par chus03 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 27/12/2008, 21h53
  4. Générer 1 erreur si taille max du champ dépassée
    Par nabalilu dans le forum VBA Access
    Réponses: 3
    Dernier message: 08/07/2008, 19h17
  5. [Oracle 9i]: erreur ORA-01925 (max enables roles)
    Par NPortmann dans le forum Oracle
    Réponses: 2
    Dernier message: 30/03/2007, 09h39

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