Tutos & Astuces

Symfony2 et Xdebug: repousser le max_nesting_level

Si vous utilisez Symfony2 avec Xdebug, vous avez certainement du tomber régulièrement, avec la génération de formulaires imbriqués ou lors de tests unitaires et fonctionnels, sur cette erreur : Maximum function nesting level of ‘100’...

Si vous utilisez Symfony2 avec Xdebug, vous avez certainement du tomber régulièrement, avec la génération de formulaires imbriqués ou lors de tests unitaires et fonctionnels, sur cette erreur :

Maximum function nesting level of ‘100’ reached, aborting!

Ce problème est connu, si vous allez assez loin dans les formulaires imbriqués, la limite par défaut n’est pas suffisante.

Le paramètre de config à changer est xdebug.max_nesting_level. On peut bien entendu le faire via le fichier php.ini, mais on peut avoir besoin, pour une raison ou une autre, de le spécifier que pour un projet spécifique, ou on a tout simplement pas l’accès à ce fichier de config.

Dans ce cas on peut le modifier assez simplement et proprement en PHP avec la fonction ini_set. L’emplacement le plus conseillé par la doc officielle est le fichier app/autoload.php, fichier qui sera inclus autant du coté web que du coté console de l’application, exactement ce que l’on veut ! :p

Les lignes de codes à ajouter sont assez simples :

<?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;

Prenez bien soin de vérifier avant si le paramètre xdebug.max_nesting_level existe, pas besoin de setter un paramètre d’un module inexistant ! 😉

Voilà, je n’invente rien, c’est expliqué sur la doc, mais je vois souvent défiler des questions à ce sujet, une petite piqure de rappel s’impose ! 😀

Share on Facebook0Tweet about this on TwitterShare on Google+0Share on LinkedIn0