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 ! 😀