7

EDIT: Para todos los interesados ​​en resolver el mismo problema, que hizo el truco:Sonata: Error grave: Nivel máximo de la función de anidación de '100' alcanza .. cuando las formas de incrustación

echo `'xdebug.max_nesting_level = 250' >> /etc/php5/conf.d/xdebug.ini` 

Creé 3 administradores para 3 entidades vinculadas entre sí, donde un administrador está incorporando B administrador y B administrador incorpora C administrador. La entidad B tiene una relación ManyToOne con la entidad A y B.

Una entidad incrusta la entidad B con el siguiente código:

$formMapper->add('b', 'sonata_type_collection', array(
    'by_reference' => false 
), array(
    'edit' => 'inline', 
    'inline' => 'table', 
    'sortable' => 'position' 
)); 

la entidad B incrusta la entidad C con la siguiente:

$formMapper->add('c', 'sonata_type_model', array( 
    'required' => true, 
    'label'  => ucfirst($this->trans('c', array(), $this->translationDomain, $this->langCode)) 
    ), array('edit' => 'list')); 

Nota: El cambio 'edit' => 'list' a favor de 'edit' => 'standard' evita el siguiente error .

Colocando array('edit' => 'list') en la entidad de administración B en un tipo de formulario sonata_type_model produce el siguiente error al editar Aity. Si se utiliza en lugar array('edit' => 'standard') entonces no hay ningún error de salida:

Sonata: Fatal error: Maximum function nesting level of '100' reached, aborting! in myProject/vendor/doctrine-common/lib/Doctrine/Common/Lexer.php on line 756 

Lo complicado o curioso es que no importa si es editar la lista estándar o si voy a B de administración para editarlo. el problema solo aparece si edito B incrustado en A con la opción editar lista lista. Y esto me está sucediendo en algunas otras entidades donde implementé el mismo comportamiento.

Éstos son A, B y C entidad y cómo se vinculan entre sí:

Una entidad:

class A 
{ 
    /** 
    * @ORM\Id 
    * @ORM\Column(type="integer", length=4) 
    * @ORM\GeneratedValue(strategy="IDENTITY") 
    */ 
    private $id; 
    /** @ORM\OneToMany(targetEntity="B", mappedBy="a", cascade={"persist"}, orphanRemoval=true) */ 
    protected $b; 
} 

la entidad B:

class B 
{ 
    /** 
    * @ORM\Id 
    * @ORM\Column(type="integer", length=4) 
    * @ORM\GeneratedValue(strategy="IDENTITY") 
    */ 
    private $id 
    /** 
    * @ORM\ManyToOne(targetEntity="C", inversedBy="b", cascade={"persist"}) 
    * @ORM\JoinColumn(name="c_id", nullable=false, referencedColumnName="id", onDelete="CASCADE") 
    */ 
    private $c; 
    /** 
    * @ORM\ManyToOne(targetEntity="A", inversedBy="b", cascade={"persist"}) 
    * @ORM\JoinColumn(name="a_id", nullable=false, referencedColumnName="id", onDelete="CASCADE") 
    */ 
    private $a; 
} 

la entidad C:

Class C 
{ 
    /** 
    * @ORM\Id 
    * @ORM\Column(type="integer", length=4) 
    * @ORM\GeneratedValue(strategy="IDENTITY") 
    */ 
    private $id; 
    /** @ORM\OneToMany(targetEntity="B", mappedBy="c", cascade={"persist"}) */ 
    private $b; 
} 

Para poder llevar un baño k en todo lo que puede usar el proyecto de demostración de sonata para verificar un comportamiento similar.
Como puede ver, es el mismo caso de uso que se puede encontrar en la demostración de Sonata Project donde la Galería está vinculada a GalleHasMedias que enlaza con Media: http://demo.sonata-project.org/admin/sonata/media/gallery/255/edit?context=default Como puede ver, GalleryHasMedia tiene una relación ManyToOne con Galería y otra con Media Cuando edite una Galería, puede ver un sonata_type_model con edit' => 'inline','inline' => 'table',, por lo que GalleryHasMedia está incrustado en el formulario Galería para poder agregar nuevos Medias que se vincularán con la Galería actual y se almacenarán dentro de GalleryHasMedia.

¿Alguien ha enfrentado una situación como la expuesta? Espero que alguien pueda señalar la dirección correcta o ayudar a obtener una pista sobre lo que está sucediendo.

PD: Para mí parece que las entidades B y C se están enlazando/incrustando entre sí en un bucle infinito. Pero como se dijo, 3 Administradores trabajan muy bien por separado (mientras que A no incluye B).

+0

que hizo el truco: echo 'xdebug.max_nesting_level = 250' >> /etc/php5/conf.d/xdebug.ini – user846226

+0

Gracias, eso me estaba volviendo loco durante un día, con Symphony mientras ejecutas phpunits – dmi3y

+0

En lugar de editar tu pregunta con tu solución, por favor proporcionar una respuesta real para que la comunidad lo sepa qu estion resuelto. – lifo

Respuesta

0

Para cualquier persona interesada en resolver el mismo problema, que hizo el truco:

echo `'xdebug.max_nesting_level = 250' >> /etc/php5/conf.d/xdebug.ini` 
5

Este es un problema común con los servidores que ejecutan xdebug. Debe aumentar el nivel de anidación aumentando el xdebug.max_nesting_level en su configuración de xdebug.ini.Establecerlo en algo así como 250 debería ser suficiente.

Una forma rápida de añadir el entorno es hacerlo en el servidor Linux:

echo `'xdebug.max_nesting_level = 250' >> /etc/php5/conf.d/xdebug.ini` 
+0

Gracias por la respuesta, pero como ya debería haber notado, ya se solucionó mediante edición. – user846226

Cuestiones relacionadas