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).
que hizo el truco: echo 'xdebug.max_nesting_level = 250' >> /etc/php5/conf.d/xdebug.ini – user846226
Gracias, eso me estaba volviendo loco durante un día, con Symphony mientras ejecutas phpunits – dmi3y
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